【发布时间】:2021-08-25 07:16:40
【问题描述】:
我正在尝试从新数据的范围(数组)中查找重复项,并将它们标记为电子表格中的重复项,当现有数据可从另一个范围获得时。
但是,我的问题是,将新数据与现有数据列表进行比较的条件不起作用。我使用了 indexOf 并包含函数无济于事。
新数据示例(从 Logger 打印):
joNumRangeUploader:
77324,77320,77318,77341,77302,77267,76975,76576
现有列表示例数据(从 Logger 打印):
joNumRangeMMICS:
77123,77002,77020,77037,77041,77042,77125,75861,74869,74960,75971,76608,76508,77287,75192,75751,75397,75715,76609,76610,74910,74814,77158,75484,76358,75984,75932,75931,76940,76444,76682,76970,76910,76459,76974,76975,76576,
预期结果:
76975,76576都应标记为重复项
实际结果:
但是,话又说回来,它们没有被标记,includes() 的条件也没有工作。
下面是我的代码:
//get values into array
const joNumRangeUploader = uploaderSheet.getRange(UploaderFirstDataRow,joNumColUploader,uploaderRowCount,1).getValues();
const joNumRangeMMICS = mmicsSheet.getRange(2,joNumColSource,mmicsSheet.getLastRow(),1).getValues();
const joNumRangeBAU = bauSheet.getRange(2,joNumColSource,bauSheet.getLastRow(),1).getValues();
let uniqueDataArray = new Array();
//go through joNumRangeUploader array and check for a duplicate; write to cell if duplicate
for(i=0; i < joNumRangeUploader.length; i++){
const dataToCheck = joNumRangeUploader[i][0];
let isUnique = true;
let fileSource = '';
//look for duplicates compating the dataToCheck to the 2 other indices
if(joNumRangeMMICS.includes(dataToCheck)){
fileSource = 'MMICS';
isUnique = false;
ui.alert("Duplicate found!"); //doesnt show in actual
}
else if(joNumRangeBAU.includes(dataToCheck) && isUnique === true){
fileSource = 'MASTERFILE';
isUnique = false;
ui.alert("Duplicate found!"); //doesnt show in actual
}
if (isUnique==true){
const pushRange = uploaderSheet.getRange((i+UploaderFirstDataRow),firstColUpload, 1, sourceColCount);
//push upload range to array
uniqueDataArray.push(pushRange.getValue());
//expected: Lx:ANx
}
else{
uploaderSheet.getRange( (i+UploaderFirstDataRow), statusCol, 1, 1).setValue("DUPLICATE " + fileSource);
}
}
【问题讨论】:
-
您使用应用程序脚本而不是公式或条件格式的任何原因?
-
这可能是一种选择。我还没有这样做,但会尝试一下。要回答您的问题,主要原因是涉及到外部 google sheet。
-
我看到您已经找到了另一个解决方案,但我认为最初的问题是
joNumRangeUploader和joNumRangeMMICS都是二维数组,您将它们视为简单数组(实际上您正在处理joNumRangeUploader正确,但删除了第二个索引[i][0]因为另一个答案的建议 - 你不应该这样做)。无论如何,如果您在声明这两个数组时添加flat()(例如const joNumRangeUploader = uploaderSheet.getRange(UploaderFirstDataRow,joNumColUploader,uploaderRowCount,1).getValues().flat()),您的问题应该得到解决。 -
此解决方案对您有用吗?在这种情况下,我会发布一个解释这一点的答案。
-
嗨!这行得通!!!!将阵列展平将是最初的解决方案。不过,我有点喜欢通过简单的公式来减少脚本中的性能工作量。
标签: javascript google-apps-script google-sheets-api