如何用SQL根据一列的特定数据筛选并生成新列?
在Google Sheets中自动化提取甜点/冰淇淋口味到新列
方法1:使用内置公式(快速实现)
基础场景:提取第一个单词
如果目标口味始终是单元格内容的第一个单词,用INDEX+SPLIT组合公式即可:
- 单个单元格公式(B2单元格输入):
=INDEX(SPLIT(A2," "),1) - 自动填充整列的数组公式(B2单元格输入,无需手动下拉):
=ARRAYFORMULA(IF(A2:A="","",INDEX(SPLIT(A2:A," "),,1)))
进阶场景:匹配特定口味列表
如果需要严格匹配预设口味列表(避免提取无关词汇),先在表格空白区域(如D2:D4)列出所有目标口味:
| D列(口味列表) |
|---|
| chocolate |
| strawberry |
| fruit |
然后用REGEXEXTRACT+TEXTJOIN精准提取:
- 单个单元格公式:
=REGEXEXTRACT(A2, TEXTJOIN("|",TRUE,D2:D4)) - 数组公式版:
=ARRAYFORMULA(IF(A2:A="","",REGEXEXTRACT(A2:A, TEXTJOIN("|",TRUE,D2:D4))))
方法2:使用Apps Script(完全自动化,支持实时触发)
如果需要每次编辑A列时自动生成对应B列内容,可以用Google Apps Script实现:
- 打开你的Google表格,点击顶部菜单「扩展」>「Apps Script」
- 删除默认代码,粘贴以下脚本:
function onEdit(e) { const activeSheet = e.source.getActiveSheet(); const editedRange = e.range; // 仅处理A列(第1列)的非表头行(假设表头在第1行) if (editedRange.getColumn() === 1 && editedRange.getRow() > 1) { const inputValue = editedRange.getValue().trim(); const targetCell = activeSheet.getRange(editedRange.getRow(), 2); if (inputValue) { // 提取第一个单词作为口味,可根据需求修改逻辑 const flavor = inputValue.split(' ')[0]; targetCell.setValue(flavor); } else { targetCell.clearContent(); } } }
- 保存脚本(命名为
FlavorExtractor即可),关闭脚本编辑器
自定义匹配逻辑(可选)
如果需要匹配预设口味列表而非仅提取第一个单词,修改脚本中的口味提取部分:
// 替换原flavor提取代码为: const flavorList = ['chocolate', 'strawberry', 'fruit']; const flavorRegex = new RegExp(`(${flavorList.join('|')})`, 'i'); // 忽略大小写 const matchResult = inputValue.match(flavorRegex); const flavor = matchResult ? matchResult[1].toLowerCase() : '';
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

