You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求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();
}

使用说明

  1. 配置脚本:

    • 替换代码中的sourceSpreadsheetId、targetSpreadsheetId为你的两个表格ID
    • 修改sourceSheetName、targetSheetName为对应工作表的名称
    • 根据实际列位置调整复选框列、ID列、更新列的索引(代码中注释已标注)
  2. 添加脚本:

    • 打开源表(蓝色表格),点击菜单栏「扩展程序」→「Apps 脚本」
    • 清空默认代码,粘贴上述完整代码,保存并命名项目(比如「批量数据更新」)
  3. 触发方式:

    • 刷新表格后,菜单栏会出现「批量更新工具」,点击「执行批量更新」即可运行
    • 首次运行需要授权,按照提示完成权限验证
  4. 操作流程:

    • 在蓝色表格中选中需要更新的任务行(确保复选框已勾选)
    • 点击「批量更新工具」→「执行批量更新」
    • 等待提示更新完成后,打开黄色表格查看对应行的更新状态

注意事项

  • 确保ID格式完全一致(ID xxx xx xxxx),否则无法匹配
  • 脚本使用批量读写方式,相比单行更新效率更高,适合处理大量数据
  • 若需要调整更新的列范围,修改代码中row.slice(2)和targetSheet.getRange的列参数即可

内容的提问来源于stack exchange,提问作者Michał Kostrzewa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:25:32