如何修改Google Apps Script实现从目标表末尾追加数据
Google Apps Script:实现数据追加而非覆盖
修改方案
原代码直接指定固定区域写入,导致覆盖数据。要实现追加,需先定位目标表B列最后一行数据的位置,再从该位置的下一行开始写入源表的有效数据。
完整代码
function copyAndAppend() { var sourceSS = SpreadsheetApp.getActiveSpreadsheet(); var sourceSheet = sourceSS.getSheetByName("Sheet1"); var targetSS = SpreadsheetApp.openById("spreadsheetkey"); var targetSheet = targetSS.getSheetByName("SheetAB1"); // 获取目标表B列最后一行有数据的行号 var lastTargetRow = targetSheet.getRange("B:B").getValues().filter(String).length; // 确定追加起始行:B列无数据则从第5行开始(匹配源表起始行),否则从最后一行的下一行开始 var startAppendRow = lastTargetRow === 0 ? 5 : lastTargetRow + 1; // 源区域与目标起始列的映射,保证数据写入对应列 var rangeMappings = [ { source: "A5:H1100", targetCol: 1 }, { source: "J5:M1100", targetCol: 10 }, { source: "U5:X1100", targetCol: 21 } ]; rangeMappings.forEach(item => { var sourceRange = sourceSheet.getRange(item.source); var data = sourceRange.getValues(); // 过滤全空行,只保留有效数据 var validData = data.filter(row => row.some(cell => cell !== "")); if (!validData.length) return; // 动态计算目标写入区域 var targetRange = targetSheet.getRange( startAppendRow, item.targetCol, validData.length, sourceRange.getNumColumns() ); targetRange.setValues(validData); }); }
核心要点
- 定位最后一行:通过
filter(String)筛选B列非空值,得到最后有数据的行号 - 过滤空数据:避免将源表中的空行写入目标表,减少无效数据
- 动态区域写入:根据有效数据的行数和列数,精准定位目标区域,完全避免覆盖原有数据
- 列映射:确保源表的不同区域写入目标表的对应列,保持数据结构一致
内容的提问来源于stack exchange,提问作者Ekac
相关产品推荐
相关产品推荐

