如何使用另一张Google Sheet工作表有条件地修改现有表格的数值
Google Sheet资产ID批量替换实现方案
以下两种方案可满足需求,可根据自己的操作习惯选择:
方案1:无代码公式法(适合单次替换操作)
操作步骤:
- 先确认两个工作表的实际名称,此处假设表单响应工作表名为
表单响应,待修改工作表名为资产表 - 待修改工作表的G列是「Annotated Asset ID」,在G列旁任意空白列(如H列)的第二行(对应G列首行数据)输入公式:
=IFERROR(XLOOKUP(G2, '表单响应'!D:D, '表单响应'!E:E, G2))
若你的表格版本不支持XLOOKUP,可替换为VLOOKUP版本:=IFERROR(VLOOKUP(G2, '表单响应'!D:E, 2, FALSE), G2) - 公式说明:如果G2的值能匹配到表单响应表D列(Old ID)的内容,就返回对应E列的New ID,匹配不到则保留G2原有值
- 将H列公式下拉填充到所有数据行,确认替换结果无误后,选中H列所有内容,右键点击「选择性粘贴」-「仅粘贴值」,覆盖到G列后删除辅助列即可
方案2:Google Apps Script法(支持自动更新、无需手动重复操作)
适合需要多次替换、或希望表单提交后自动更新的场景:
- 打开目标Google Sheet,点击顶部菜单栏「扩展程序」-「Apps 脚本」进入脚本编辑器
- 清空编辑器内默认的示例代码,粘贴以下代码:
function replaceOldAssetID() { const ss = SpreadsheetApp.getActiveSpreadsheet(); // 请将下方两个表名修改为你实际的工作表名称 const formResponseSheet = ss.getSheetByName("表单响应"); const targetAssetSheet = ss.getSheetByName("资产表"); // 读取表单响应表的ID映射关系,跳过表头行 const formData = formResponseSheet.getDataRange().getValues().slice(1); // D列索引为3,E列索引为4,构建ID映射字典 const idMapping = new Map(formData.map(row => [row[3], row[4]])); // 读取待修改表G列的所有资产ID const assetIdCol = targetAssetSheet.getRange("G:G").getValues(); // 遍历替换ID const updatedAssetIds = assetIdCol.map(row => { const currentId = row[0]; return [idMapping.has(currentId) ? idMapping.get(currentId) : currentId]; }); // 替换结果写回G列 targetAssetSheet.getRange("G:G").setValues(updatedAssetIds); SpreadsheetApp.getUi().alert("资产ID批量替换完成"); }
- 点击保存按钮自定义项目名称,首次运行需要完成账号授权,授权通过后运行函数即可完成批量替换
- 如需表单提交后自动触发替换,可在脚本编辑器页面添加触发器,触发事件选择「表单提交时」,触发函数选择
replaceOldAssetID即可
参考示例图:
表单响应表:
现有待修改工作表:
内容的提问来源于stack exchange,提问作者Riceman
相关产品推荐
相关产品推荐



