我正在匹配两张表中的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
谢谢,对此有任何帮助
希达
匹配后的SheetB
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);
}
答案 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)。