为匹配功能重新配置输出Google脚本第2部分

时间:2018-01-12 15:20:08

标签: javascript google-apps-script google-sheets

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

SheetA = FindReplace SheetB = Test

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

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

这来自我在这里提出的一个问题

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: Cannot set property "0.0" of undefined to "(class)@36bad839"

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

谢谢,对此有任何帮助

希达

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);
 }

1 个答案:

答案 0 :(得分:2)

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

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)。