如何修改Google Apps Script脚本,避免.map()覆盖表格B、C列数据
保留目标表格B、C列数据的Google Apps Script修改方案
原脚本运行时会清空目标表格dstSheet的B、C列数据,核心问题出在处理目标数据的.map()方法里——原代码把B、C列强制设为null。下面是修改方案:
原脚本代码
function dorozliczenia() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const srcSheet = ss.getSheetByName("arkusz 1"); const dstSS = SpreadsheetApp.openById("1bjqauqiyEzUkECaxqswRmOQPYWydpSAvLf97t5ovbXQ"); const dstSheet = dstSS.getSheetByName("arkusz 1"); const obj = Object.fromEntries(srcSheet.getRange("A2:C" + srcSheet.getLastRow()).getValues().map(([a, , c]) => [c, a])); const dstRange = dstSheet.getRange("A2:D" + dstSheet.getLastRow()); const values = dstRange.getValues().map(([, , , a]) => [obj[a] ? true : false,null ,null , a]); dstRange.setValues(values); }
修改后的脚本代码
function dorozliczenia() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const srcSheet = ss.getSheetByName("arkusz 1"); const dstSS = SpreadsheetApp.openById("1bjqauqiyEzUkECaxqswRmOQPYWydpSAvLf97t5ovbXQ"); const dstSheet = dstSS.getSheetByName("arkusz 1"); const obj = Object.fromEntries(srcSheet.getRange("A2:C" + srcSheet.getLastRow()).getValues().map(([a, , c]) => [c, a])); const dstRange = dstSheet.getRange("A2:D" + dstSheet.getLastRow()); // 修改map回调,保留原B、C列的值 const values = dstRange.getValues().map(([, b, c, a]) => [obj[a] ? true : false, b, c, a]); dstRange.setValues(values); }
修改说明
- 原代码中
.map(([, , , a]) => ...)只解构了D列的值(a),把B、C列的位置留空,返回时设为null,导致这两列被清空。 - 修改后改为
.map(([, b, c, a]) => ...),直接获取原B列(b)和C列(c)的原有值,返回数组时复用这两个值,从而保留B、C列的数据不变。
内容的提问来源于stack exchange,提问作者Michał Kostrzewa
相关产品推荐
相关产品推荐

