我有一个脚本,只为其中一个匹配的行设置值为True。同一电子表格中有两张纸。我有脚本检查一张纸与另一张相匹配的值。问题是它只将True置于最后一个匹配值旁边,而不是所有不同的匹配值。我如何找到所有可能的重复项并在每个重复项旁边放置True。它正在寻找的值实际上是注册码;如果有人注销,他们会输入他们的注册码,并且会在注册表中与他们的注册行匹配。
function findDuplicates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetR = ss.getSheetByName("Registration");
var sheetCR = ss.getSheetByName("Cancel Registration")
var dataR = sheetR.getDataRange().getValues();
var dataCR = sheetCR.getDataRange().getValues();
var newData = new Array();
var headerRow = 1;
for (var i = 1; i < dataR.length && i < dataCR.length; ++i) {
var rowR = dataR[i];
var rowCR = dataCR[i];
var duplicate = false;
if (rowR[9] === rowCR[8]) {
duplicate = true;
}
}
if (duplicate = true) {
sheetR.getRange(headerRow + i, 11).setValue("True");
}
}
更新代码:
function findDuplicates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetR = ss.getSheetByName("Registration");
var sheetCR = ss.getSheetByName("Cancel Registration")
var dataR = sheetR.getDataRange().getValues();
var dataCR = sheetCR.getDataRange().getValues();
var headerRow = 1;
for (var i = 1; i < dataR.length && i < dataCR.length; i++) {
var rowR = dataR[i];
var rowCR = dataCR[i];
var duplicate = false;
if (rowR[9] === rowCR[8]) {
duplicate = true;
}
if (duplicate === true) {
sheetR.getRange(headerRow + i, 11).setValue("True");
}
}
}
更新
function findDuplicates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetR = ss.getSheetByName("Registration");
var sheetCR = ss.getSheetByName("Cancel Registration")
var dataR = sheetR.getDataRange().getValues();
var dataCR = sheetCR.getDataRange().getValues();
var headerRow = 1;
for (var i = 1; i < dataR.length; i++) {
for (var j = 1; j < dataCR.length; j++) {
var rowR = dataR[i];
var rowCR = dataCR[j];
var duplicate = false;
if (rowR[9] === rowCR[8]) {
duplicate = true;
}
if (duplicate === true) {
sheetR.getRange(headerRow + i, 11).setValue("Y");
}
}
}
}
答案 0 :(得分:1)
您的if (duplicate = true)
不在for循环中。由于它根据i
的值计算行,因此它仅更改i
的最后一个值的值,这是在工作表中找到的最后一个重复元素。所以,我建议你把它移到for循环中。
使用上述更改测试代码,一切都按预期工作。此外,您的代码目前运行超过限制11行。也就是说,如果您的第12行是包含数据的最后一行且13为空,则它还将第13行中的列值设置为TRUE
。在for循环中将++i
更改为i++
也可以解决此问题。
最后但并非最不重要的是,你的if语句声明需要duplicate == true
而不是duplicate = true
,因为第一个是检查重复的值是否为真,第二个是实际上将duplicate的值赋值为true。