如何在Google Sheets中为别名/部分相同字符串分配相同ID
解决方案:给基础字符串及别名批量分配对应ID
一、公式方案(无需脚本,快速实现)
核心思路是先提取D列文本中的基础字符串(去除括号及括号内的内容),再匹配B列的基础字符串,返回对应的ID。
假设表格结构:
- A列:基础字符串对应的ID
- B列:基础字符串(B2:B6)
- D列:待处理的基础字符串或别名(D2:D21)
- E列:输出分配后的ID(E2:E21)
在E2单元格输入以下数组公式,批量处理整范围:
=ARRAYFORMULA(IF(D2:D21="", "", XLOOKUP(REGEXREPLACE(D2:D21, "\s*\(.*\)", ""), B2:B6, A2:A6, "未找到")))
公式说明:
ARRAYFORMULA:一次性处理整列/范围,无需手动下拉填充REGEXREPLACE(D2:D21, "\s*\(.*\)", ""):正则匹配并去除括号及括号前的空格,提取基础字符串(例如将BYTE (VAR 1)转为BYTE)XLOOKUP:用提取的基础字符串匹配B列的基础值,返回对应A列的ID;匹配失败时显示未找到
调整说明:
- 若ID列不是A列,将公式中的
A2:A6替换为实际ID列范围 - 若需处理整列而非固定范围,将
D2:D21、B2:B6、A2:A6改为D2:D、B2:B、A2:A即可
二、Google Apps Script方案(适合复杂场景)
如果别名格式多变,或需要自动触发更新,可使用脚本实现更灵活的处理:
- 打开Google表格,点击「扩展程序」→「Apps Script」
- 删除默认代码,粘贴以下脚本:
function assignIDs() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 读取基础字符串与ID的映射数据(A列ID,B列基础字符串) const baseRange = sheet.getRange("A2:B6"); const baseData = baseRange.getValues(); // 构建基础字符串到ID的映射对象 const idMapping = {}; baseData.forEach(row => { const baseStr = row[1]?.trim(); if (baseStr) { idMapping[baseStr] = row[0]; } }); // 读取待处理的D列数据 const targetRange = sheet.getRange("D2:D21"); const targetValues = targetRange.getValues(); // 生成对应ID数组 const result = targetValues.map(row => { if (!row[0]) return [""]; // 提取基础字符串,兼容多种括号格式 const cleanBaseStr = row[0].replace(/\s*\(.*?\)/, "").trim(); return [idMapping[cleanBaseStr] || "未找到"]; }); // 将结果写入E列 sheet.getRange("E2:E21").setValues(result); }
使用说明:
- 修改范围:若需处理整列,将
"A2:B6"、"D2:D21"、"E2:E21"改为对应整列范围(例如"A2:B") - 运行脚本:保存项目后点击运行按钮,完成权限授权即可自动分配ID
- 自动更新:可在Apps Script中设置「 onChange 」触发器,实现表格内容变化时自动执行分配逻辑
扩展调整:
- 若别名用方括号,可修改正则表达式为
/\s*\[[^\]]*\]/ - 若需区分大小写匹配,直接用原始字符串匹配即可(当前脚本默认不区分,依赖原始字符串一致)
内容的提问来源于stack exchange,提问作者Lod
相关产品推荐
相关产品推荐

