You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script中使用includes/indexOf做重复校验失效问题求助

问题根因
  • Google Apps Script 中Range.getValues()返回的是二维数组,结构为[[行1列1值], [行2列1值], ...],你直接对二维数组调用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();

// 把二维数组拍平为一维Set,统一转成字符串格式避免类型差异导致匹配失败
const mmicsSet = new Set(joNumRangeMMICS.flat().map(item => String(item)));
const bauSet = new Set(joNumRangeBAU.flat().map(item => String(item)));

let uniqueDataArray = new Array();

//遍历新数据检查重复,重复则标记单元格
for(i=0; i < joNumRangeUploader.length; i++){
    const dataToCheck = String(joNumRangeUploader[i][0]); // 统一转成字符串比对
    let isUnique = true;
    let fileSource = '';

    if(mmicsSet.has(dataToCheck)){
      fileSource = 'MMICS';
      isUnique = false;
      ui.alert("Duplicate found!");
    }
    else if(bauSet.has(dataToCheck)){
      fileSource = 'MASTERFILE';
      isUnique = false;
      ui.alert("Duplicate found!");
    }

    if (isUnique){
      const pushRange = uploaderSheet.getRange((i+UploaderFirstDataRow),firstColUpload, 1, sourceColCount);
      uniqueDataArray.push(pushRange.getValue());
    }
    else{
      uploaderSheet.getRange( (i+UploaderFirstDataRow), statusCol, 1, 1).setValue("DUPLICATE " + fileSource);
    }
}
补充说明
  • Array.flat()可以把二维数组降为一维,直接拿到所有单元格的原始值
  • 统一转成字符串是为了避免单元格格式导致的类型差异,比如有的单元格是数字格式76975,有的是字符串格式"76975",直接全等判断会不匹配
  • 用Set存储比对库,查询时间复杂度是O(1),相比每次用includes遍历数组的O(n),数据量越大性能优势越明显

内容的提问来源于stack exchange,提问作者plaridel1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:09:01