如何将Google Sheet指定字段复制到另一工作表?
调整Google Apps Script实现指定字段复制到目标表特定位置
原脚本会复制源表所有数据到目标表,无法满足「仅复制新增行的指定字段到目标表特定单元格」的需求,以下是修改后的解决方案:
核心修改点
- 仅处理源表的新增行(避免重复复制历史数据)
- 自定义字段映射关系,将源表指定列对应到目标表的特定列
- 批量写入数据,提升脚本运行效率
修改后的代码
function copySpecificFields() { // 源表配置 const sourceSpreadsheetId = "xxxxx"; // 替换为你的源表ID const sourceSheetName = "New_Customers"; // 字段映射:[源表列索引(0开始), 目标表列索引(0开始)] const fieldMapping = [ [0, 1], // 源表A列 → 目标表B列 [2, 0], // 源表C列 → 目标表A列 [4, 3] // 源表E列 → 目标表D列 // 按需添加更多字段映射 ]; // 目标表配置 const targetSpreadsheetId = "xxxx"; // 替换为你的目标表ID const targetSheetName = "Sheet1"; // 获取源表数据 const sourceSs = SpreadsheetApp.openById(sourceSpreadsheetId); const sourceSheet = sourceSs.getSheetByName(sourceSheetName); const sourceData = sourceSheet.getDataRange().getValues(); const lastSourceRow = sourceSheet.getLastRow(); // 记录上次处理的最后行数,避免重复处理 const scriptProps = PropertiesService.getScriptProperties(); const lastProcessedRow = parseInt(scriptProps.getProperty("lastProcessedRow")) || 0; // 无新增行则直接退出 if (lastSourceRow <= lastProcessedRow) return; // 提取新增行数据 const newRows = sourceData.slice(lastProcessedRow); // 构建目标表需要的数据行 const targetData = newRows.map(row => { const targetRow = new Array(Math.max(...fieldMapping.map(m => m[1])) + 1).fill(""); fieldMapping.forEach(([sourceCol, targetCol]) => { targetRow[targetCol] = row[sourceCol]; }); return targetRow; }); // 写入目标表 const targetSs = SpreadsheetApp.openById(targetSpreadsheetId); const targetSheet = targetSs.getSheetByName(targetSheetName); const targetStartRow = targetSheet.getLastRow() + 1; if (targetData.length > 0) { targetSheet.getRange(targetStartRow, 1, targetData.length, targetData[0].length).setValues(targetData); // 更新最后处理行数 scriptProps.setProperty("lastProcessedRow", lastSourceRow.toString()); } }
自定义调整说明
- 替换表ID:将
sourceSpreadsheetId和targetSpreadsheetId替换为你的实际Google Sheet ID(可从表URL中获取) - 调整字段映射:修改
fieldMapping数组,按照你的需求添加或修改源列与目标列的对应关系(注意索引从0开始,对应Google Sheets的A列=0,B列=1,以此类推) - 设置自动触发:若需要表单提交后自动运行脚本,可在脚本编辑器中添加「 onChange 触发器」:
- 点击顶部菜单「编辑」→「当前项目的触发器」
- 点击「添加触发器」,选择
copySpecificFields函数,触发事件选择「从电子表格提交」
内容的提问来源于stack exchange,提问作者Mauro Mancini
相关产品推荐
相关产品推荐

