如何用Google Apps Script实现跨工作表单元格数值累加且不覆盖原有值
问题原因
你原有代码仅读取了Sheet0的数值,没有提前获取Sheet1中I4:I586区域的原有库存值,直接写入新数值自然会覆盖原有数据。
修改后可用代码
function V6() { const ss = SpreadsheetApp.getActive(); const sh0 = ss.getSheetByName('Sheet0'); // 待加库存所在工作表 const sh1 = ss.getSheetByName('Sheet1'); // 当前库存所在工作表 const handleRows = 583; // 对应4到586行共583行数据,可根据实际范围调整 // 分别读取待加库存和当前库存的对应区域数值 const addStock = sh0.getRange(4, 7, handleRows, 1).getValues(); const currentStock = sh1.getRange(4, 9, handleRows, 1).getValues(); // 逐行累加计算新库存值 const finalStock = currentStock.map((item, index) => { const addVal = Number(addStock[index][0]) || 0; const currentVal = Number(item[0]) || 0; return [currentVal + addVal]; }); // 写入累加后的新库存到Sheet1 sh1.getRange(4, 9, handleRows, 1).setValues(finalStock); // 清空Sheet0的待加库存列 sh0.getRange(4, 7, handleRows, 1).setValues(new Array(handleRows).fill([0])); }
核心改动说明
- 新增了Sheet1原有库存的读取逻辑,累加计算基于原有数值进行,不会覆盖历史数据
- 拆分了两个工作表的读写操作,避免操作对象混淆
- 增加了非数值兼容处理,遇到空单元格、文本内容时不会抛出错误
- 单独实现待加库存列的清零逻辑,逻辑更清晰易维护
内容的提问来源于stack exchange,提问作者Mischa.Melkert
相关产品推荐
相关产品推荐

