求Google Sheet手动触发批量更新另一表格指定行的脚本
Google Sheets 批量更新脚本(手动触发)
核心功能
- 手动触发执行,支持批量多行更新
- 基于格式为
ID xxx xx xxxx的唯一标识,将源表(蓝色表格)中带复选框标记的选中行数据,同步更新到目标表(黄色表格)的对应行
完整脚本代码
function batchUpdateData() { // 替换为你的源表和目标表ID、工作表名称 const sourceSpreadsheetId = "1bjqauqiyEzUkECaxqswRmOQPYWydpSAvLf97t5ovbXQ"; const targetSpreadsheetId = "11ZVtFJ5Ul5nUu3PLxUu_xBlfS0bbeAWRj8-ZKwKUTG8"; const sourceSheetName = "源表名称"; // 替换成你的蓝色表格工作表名 const targetSheetName = "目标表名称"; // 替换成你的黄色表格工作表名 // 获取源表和目标表对象 const sourceSheet = SpreadsheetApp.openById(sourceSpreadsheetId).getSheetByName(sourceSheetName); const targetSheet = SpreadsheetApp.openById(targetSpreadsheetId).getSheetByName(targetSheetName); // 获取用户选中的范围 const selectedRange = sourceSheet.getActiveRange(); const selectedRows = selectedRange.getRow(); const numRows = selectedRange.getNumRows(); // 获取源表数据(假设复选框在第1列,ID在第2列,需要更新的列从第3列开始,可根据实际调整) const sourceData = sourceSheet.getRange(selectedRows, 1, numRows, sourceSheet.getLastColumn()).getValues(); // 获取目标表所有ID和对应行索引,构建映射表提高匹配效率 const targetIdsRange = targetSheet.getRange(2, 2, targetSheet.getLastRow() - 1, 1); // 假设ID从第2行第2列开始 const targetIds = targetIdsRange.getValues(); const idRowMap = {}; targetIds.forEach((row, index) => { const id = row[0].trim(); if (id) idRowMap[id] = index + 2; // 目标表行号=索引+2(因为从第2行开始) }); // 批量处理更新数据 const updateBatch = []; sourceData.forEach((row, rowIndex) => { const isChecked = row[0]; // 复选框列(第1列) const sourceId = row[1].trim(); // ID列(第2列) if (isChecked && idRowMap[sourceId]) { const targetRow = idRowMap[sourceId]; // 提取需要更新的列数据(这里取第3到最后一列,可根据实际调整) const updateValues = row.slice(2); updateBatch.push({ row: targetRow, values: updateValues }); } }); // 执行批量更新,减少读写次数提升性能 updateBatch.forEach(item => { const targetRange = targetSheet.getRange(item.row, 3, 1, item.values.length); // 目标表从第3列开始更新 targetRange.setValues([item.values]); }); // 提示更新完成 SpreadsheetApp.getUi().alert(`已完成${updateBatch.length}条数据的批量更新`); } // 添加自定义菜单,方便手动触发 function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('批量更新工具') .addItem('执行批量更新', 'batchUpdateData') .addToUi(); }
使用说明
配置脚本:
- 替换代码中的
sourceSpreadsheetId、targetSpreadsheetId为你的两个表格ID - 修改
sourceSheetName、targetSheetName为对应工作表的名称 - 根据实际列位置调整复选框列、ID列、更新列的索引(代码中注释已标注)
- 替换代码中的
添加脚本:
- 打开源表(蓝色表格),点击菜单栏「扩展程序」→「Apps 脚本」
- 清空默认代码,粘贴上述完整代码,保存并命名项目(比如「批量数据更新」)
触发方式:
- 刷新表格后,菜单栏会出现「批量更新工具」,点击「执行批量更新」即可运行
- 首次运行需要授权,按照提示完成权限验证
操作流程:
- 在蓝色表格中选中需要更新的任务行(确保复选框已勾选)
- 点击「批量更新工具」→「执行批量更新」
- 等待提示更新完成后,打开黄色表格查看对应行的更新状态
注意事项
- 确保ID格式完全一致(
ID xxx xx xxxx),否则无法匹配 - 脚本使用批量读写方式,相比单行更新效率更高,适合处理大量数据
- 若需要调整更新的列范围,修改代码中
row.slice(2)和targetSheet.getRange的列参数即可
内容的提问来源于stack exchange,提问作者Michał Kostrzewa
相关产品推荐
相关产品推荐

