javascript - 重新配置匹配函数 Google 脚本的输出第 2 部分

标签 javascript google-apps-script google-sheets

我正在匹配两张表中的 A 列

SheetA = 查找替换 SheetB = 测试

如果存在匹配项,则将 SheetA 中匹配单元格右侧的值回发到 SheetB 中的同一行,但从 B 列开始

匹配列中的范围大小可能不同

它来 self 在这里提出的问题

Match text strings of two columns on different sheet and post back using google script

我需要做的更改是,如果找到匹配项,我需要从列索引数组中发回单元格,而不仅仅是单个单元格

例如:如果找到匹配项,则回发 SheetA 的第 2、4、5 列,因此索引列将为 arr = [1,3,4]

我正在尝试这个

var arr = [1,3,4];
var temp = [];
for (var i = 0; i < arr.length; i++) {
         temp[a][i] = [dataA[a][arr[i]]];
    };
 res.push([temp])

我收到错误TypeError:无法将未定义的属性“0.0”设置为“(class)@36bad839”

这是一个 Google 表格 https://docs.google.com/spreadsheets/d/1_pzHyMpeQtYs6xlLHa7EBtX2vI2y5lwwSktcgVHHcTs/edit?usp=sharing

谢谢您对此的任何帮助

表A

enter image description here

比赛后的SheetB

enter image description here

function MatchColumnsAlternate2(){
  // gets spreadsheet A and the range of data
  var sheetA =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("FindReplace");
  var dataA = sheetA.getRange(2, 1, sheetA.getLastRow(), 2).getValues();

  // gets spreadsheet B and the range of data
  var sheetB = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test");
  var dataB = sheetB.getRange(2, 1, sheetB.getLastRow(), 1).getValues();

  // Added
 var arr = [1,3,4];
  var temp = [];
  var res = [];
  for (var b in dataB) {
  for (var a in dataA) {
    if (dataA[a][0] == dataB[b][0]) res.push([dataA[a][1]]);
      for (var i = 0; i < arr.length; i++) {
             temp[a][i] = [dataA[a][arr[i]]];
        };
     res.push([temp])
  }
  if (b != res.length - 1) res.push([""]);
  }
 sheetB.getRange(2, 2, res.length, res[0].length).setValues(res);
 }

最佳答案

错误的原因是您将 var temp =[] 定义为一维数组。您需要为 var temp 的第一个维度中的每个元素定义第二个维度,如下所示:

function arrayFun(){
 var temp = []  //Define first dimesion of the array here
 for(var i= 0; i< 10 ; i++){
  temp[i] = []  //Define the second Dimension of the array here for each 1 dimension element
  temp[i][0]= i 
 }

  Logger.log(temp)

}

编辑:您可以通过以下方式简化整个代码,不需要创建临时数组。

    var arr = [1,3,4];
  var count = 0
  var res = [];
  for (var b in dataB) {
  for (var a in dataA) {

    if (dataA[a][0].trim() == dataB[b][0].trim()) {    
      res[b] = []                      // create 2d array
      for (var i = 0; i < arr.length; i++) {
            res[b].push(dataA[a][arr[i]]);
        }; 
    } 
  }
  if (b != res.length - 1) 
  { res[b] = []
    for (var i = 0; i < arr.length; i++) {
            res[b].push(" ");   //Push empty data to keep dimesions consistent
        }; 
  }
  }
 Logger.log(res)
 sheetB.getRange(2, 2, res.length, res[0].length).setValues(res);

另外,请注意 push function 的使用对于数组(您可以推送单个元素),使用 array[0].push("element 0,0") 或者您可以通过 array.push(["Element 0, 0"])(插入整个 2Dimensions)。

关于javascript - 重新配置匹配函数 Google 脚本的输出第 2 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48229154/

相关文章:

ios - 谷歌表格嵌入 : Broken page in mobile browsers

javascript - Google 表格、脚本在制作副本后停止工作。

javascript - 拉斐尔 JS getbyid 不起作用

javascript - window.addEventListener 未在单击事件上执行

javascript - Dojo 的响应式设计

javascript - 阻止 onEdit 在某些选项卡上运行

google-apps-script - 包含来自 WebSocket 的数据的 Google 电子表格

javascript - 更改脚本 : Loop through divs every 10 seconds PLUS select DIV

javascript - 按每个单元格的单词数从最多到最少的 Google 脚本对列进行排序

google-apps-script - 取消合并电子表格单元格并用数据填充前合并的空单元格