修改Google Apps Script实现整行判定的唯一数据追加功能
修改Google Apps Script实现整行数据去重同步
我需要实现一个函数,将Salesforce实时同步报表中的唯一数据粘贴到另一工作表。但目前代码仅通过第一列的值判定数据唯一性,需要修改为基于整行数据进行重复判定。
修改后的完整代码
function appending() { const ss = SpreadsheetApp.getActive(); const source = ss.getRange('Sync!A3:K'); const target = ss.getRange('Report!H3:R'); appendUniquesToRange_(source, target); } function appendUniquesToRange_(sourceRange, targetRange) { const dataToAppend = sourceRange.getValues(); const existingData = targetRange.getValues(); // 合并现有数据和待追加数据,过滤整行重复项及空行 const newData = existingData .concat(dataToAppend) .filter((row, rowIndex, array) => { // 将整行转为JSON字符串作为唯一标识,避免数组直接比较的问题 const rowStr = JSON.stringify(row); // 只保留第一次出现的整行,同时过滤全空行 return array.map(r => JSON.stringify(r)).indexOf(rowStr) === rowIndex && row.join('') !== ''; }); targetRange .clearContent() .offset(0, 0, newData.length, newData[0]?.length || 0) .setValues(newData); }
关键改动说明
- 把原代码中仅取第一列(
tuple[0])作为唯一标识的逻辑,改成将整行数据转为JSON字符串(JSON.stringify(row)),这样只要整行内容完全一致,就会被判定为重复项。 - 新增了
row.join('') !== ''的判断,过滤掉全为空的行,避免无效数据被保留。 - 优化了目标范围的列数处理(
newData[0]?.length || 0),防止空数组导致的报错。
内容的提问来源于stack exchange,提问作者cwoolf27
相关产品推荐
相关产品推荐

