跨Google Sheets复制最后一行至目标空白行失败求助
解决跨Google Sheets复制行的报错问题
问题原因
copyTo()方法仅支持同一Spreadsheet文件内的工作表间复制操作,跨文件调用就会抛出Exception: Target range and source range must be on the same spreadsheet错误。
修正后的代码
通过先读取源行数据、再写入目标表格的方式实现跨文件复制:
function moveRows() { // 标识源表格与目标表格 let ss = SpreadsheetApp.openById('1PugO3VL8ZkGzA6zcYfUkQK4WkU-FfRUBHUzRDTmEbYE'); let target = SpreadsheetApp.openById('17my-WAAVkZK8m541dH50japQZYQY4WEC_vm12-fCKR8'); let source_sheet = ss.getSheetByName('Sheet2'); let target_sheet = target.getSheetByName('Sheet1'); // 获取源表格最后一行的已填充数据 let sourceLastRow = source_sheet.getLastRow(); let sourceData = source_sheet.getRange(sourceLastRow, 1, 1, 10).getValues(); // 获取目标表格的首个空白行 let targetLastRow = target_sheet.getLastRow(); let targetRange = target_sheet.getRange(targetLastRow + 1, 1, 1, sourceData[0].length); // 将数据写入目标表格 targetRange.setValues(sourceData); }
关键修改说明
- 替换
copyTo()为getValues()+setValues()组合:跨文件场景下,必须先读取数据为二维数组,再写入目标范围 - 优化源数据获取逻辑:原代码依赖
activeRange,改成直接取源表最后一行,更贴合你“复制最后一行已填充数据”的需求 - 动态匹配列数:用
sourceData[0].length自动匹配目标范围的列数,避免硬编码导致的行列不匹配问题
内容的提问来源于stack exchange,提问作者bigGASsnewbie
相关产品推荐
相关产品推荐

