Google Sheets脚本实现:提取单元格内特定公司名至指定列
解决Google Sheets提取多文本中公司名称的问题
嘿,我来帮你搞定这个提取公司名称的需求!你现有的脚本只是简单判断单元格是否等于固定文本,完全没处理“从多内容里提取不同公司名”的核心逻辑,咱们来重写一下适配你的场景。
方案1:已知固定公司列表(推荐,准确率高)
如果你的目标公司名称是固定的一批,咱们可以直接基于这个列表去匹配提取,步骤如下:
改进后的脚本
function onOpen() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const menuEntries = [{name: "Copy Company Name to Col J", functionName: "fillColJ"}]; ss.addMenu("Move Data", menuEntries); } function fillColJ() { const activeSheet = SpreadsheetApp.getActiveSheet(); const allData = activeSheet.getDataRange().getValues(); // 👇 替换成你实际需要提取的所有公司名称 const targetCompanies = ["Alpha Corp", "Beta Inc", "Gamma Ltd", "Delta Group", "XX科技公司"]; allData.forEach((row, rowIndex) => { const cellText = row[5]; // 对应第6列(F列),数组索引从0开始 if (typeof cellText !== 'string') return; // 跳过非文本单元格,避免报错 // 从单元格内容里筛选出存在的公司,自动去重 const foundCompanies = [...new Set( targetCompanies.filter(company => cellText.includes(company)) )]; // 取前2-3个匹配到的公司,用逗号分隔 const resultText = foundCompanies.slice(0, 3).join(", "); // 写入同行的J列(第10列) activeSheet.getRange(rowIndex + 1, 10).setValue(resultText); }); }
使用说明
- 把脚本里的
targetCompanies数组替换成你实际要提取的所有公司名称; - 保存脚本后,刷新你的Google Sheets表格,顶部会出现「Move Data」菜单;
- 点击「Copy Company Name to Col J」,脚本就会自动遍历每一行,提取F列里的公司名并写入J列。
方案2:自动识别公司名(无固定列表时用)
如果公司名称没有固定列表,但有统一格式(比如英文的XX Corp/Inc/Ltd、中文的XX公司/集团),可以用正则表达式来匹配:
适配正则的脚本片段
把上面fillColJ函数里的匹配部分替换成这段:
// 👇 根据你的公司名格式调整正则,这里是中英文通用示例 const companyRegex = /([A-Za-z\s]+(?:Corp|Inc|Ltd|Group))|([\u4e00-\u9fa5]+(?:公司|集团))/g; const matches = cellText.match(companyRegex); // 去重后取前2-3个 const foundCompanies = matches ? [...new Set(matches)] : [];
注意事项
- 正则需要根据你实际的公司名格式调整,比如如果还有「XX股份」,就把
(?:公司|集团)改成(?:公司|集团|股份); - 这种方式可能会误匹配,建议先小范围测试调整正则。
内容的提问来源于stack exchange,提问作者jon_win
相关产品推荐
相关产品推荐

