【发布时间】:2020-05-25 07:54:04
【问题描述】:
我在为 Google 表格编写一个小脚本时遇到了一个问题。我想做的基本事情是获取整列的条目并将其与可能具有不同长度的不同工作表的另一列的条目进行比较。然后匹配的条目应该被推送到另一个数组,并且在第一张表的另一列中,每一行都应该标有“已经在其他电子表格中”,其中一个匹配条目出现。
第一张表的第一列包含 5 个元素 [从第 1 行开始]
banana
apple
cucumber
strawberry
raspberry
第二张表的第二列包含 9 个元素 [从第 1 行开始]
tomato
pineapple
strawberry
walnut
apple
watermelon
kiwi
banana
raspberry
这是目前为止的基本代码:
function arraycompare() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var ss1 = SpreadsheetApp.openById("...Sheet_ID...");
var sheet1 = ss1.getSheetByName("Sheet1");
var lastrow = sheet.getLastRow();
var lastrow1 = sheet1.getLastRow();
var range = sheet.getRange(1, 1, lastrow, 1);
var sheetdata = range.getValues();
var range1 = sheet1.getRange(1, 2, lastrow, 1);
var sheet1data = range1.getValues();
var match = [];
for (var x = 0; x < sheetdata.length; x++) {
for (var y = 0; y < sheetdata[x].length; y++) {
for(var i = 0; i < sheet1data.length; i++){
for(var j = 0; j < sheet1data[i].length; j++){
if (sheetdata[x][y] == sheet1data[i][j]){
sheet.getRange(x, 2).setValue("Already in other Spreadsheet");
match.push(sheetdata[x][y]);
};
};
};
};
};
//test
Logger.log(match);
};
记录器的输出只是将[apple, strawberry] 显示为匹配项,而不是覆盆子。我假设 for 循环在 5 个元素处停止,但我真的不明白为什么以及如何用 2d 数组解决这个问题?
此外,“已经在电子表格中”的概念出现在第 2 行中香蕉和黄瓜的行位置,而不是与苹果和草莓在同一行。真的很想知道,我在这里做错了什么以及如何解决这个问题以获得更好的理解。
希望你们能帮帮我。提前非常感谢。
【问题讨论】:
-
我认为你的问题是由于错误的变量和范围的第一个索引。那么如何将
var range1 = sheet1.getRange(1, 2, lastrow, 1);修改为var range1 = sheet1.getRange(1, 2, lastrow1, 1);并将sheet.getRange(x, 2).setValue("Already in other Spreadsheet");修改为sheet.getRange(x + 1, 2).setValue("Already in other Spreadsheet");? -
Ouuch :D 这可能为我节省了数小时的 for 循环以及为什么它没有按预期工作,非常感谢 :)
-
感谢您的回复。很高兴您的问题得到解决。
标签: javascript google-apps-script multidimensional-array google-sheets comparison