如何从其他工作表复制数据并追加为新行,同时调整数据格式?
解决Google Sheets脚本的两个问题:追加行与转置数据
问题说明
- 当前脚本会覆盖目标区域数据,需改为追加新行而非覆盖
- 源数据为竖排(如J6:J9),需转换为横排一行后粘贴
修改后的完整代码
function copyPaste(sourceLink, sourceSheet, sourceRange, destiLink, destiSheet) { // 读取源数据 var ssRaw = SpreadsheetApp.openByUrl(sourceLink); var sheetRaw = ssRaw.getSheetByName(sourceSheet); var range = sheetRaw.getRange(sourceRange); var data = range.getValues(); // 将竖排二维数组转成横排一维数组 const transposedData = data.map(row => row[0]); // 写入目标表格 var ss = SpreadsheetApp.openByUrl(destiLink); var sheet = ss.getSheetByName(destiSheet); // 追加新行,不覆盖原有数据 sheet.appendRow(transposedData); } function run() { copyPaste( 'https://docs.google.com/spreadsheets/d/16cXFr_mkS_Hheicg1oNTZzrk65NeqYwiDpsi1TygcYI/edit#gid=1155920417', 'Invoice Calculator', 'J6:J9', 'https://docs.google.com/spreadsheets/d/16cXFr_mkS_Hheicg1oNTZzrk65NeqYwiDpsi1TygcYI/edit#gid=1810062534', 'Employee Pay Tracker' ); }
关键修改点
数据转置:
源数据通过getValues()返回的是二维数组(竖排时为多行1列),使用data.map(row => row[0])提取每行首个元素,将其转换为一维数组,对应横排的一行数据,满足格式需求。追加行逻辑:
- 移除了原代码中
clearContent()和setValues()的覆盖式写入逻辑 - 改用
appendRow()方法,该方法会自动在目标表格的最后一行下方插入新行,完全避免覆盖原有数据 - 删除了原函数中的
destiRange参数,因为追加行无需指定固定目标范围
- 移除了原代码中
内容的提问来源于stack exchange,提问作者LordLowdar
相关产品推荐
相关产品推荐

