我正在匹配两张表中的 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
比赛后的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);
}
最佳答案
错误的原因是您将 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/