求助:自动导出的Sheet CSV数据提取与结构化处理
解决Google Sheets提取结构化培训记录的方案
针对你遇到的原始数据拆分提取需求,结合Google Sheets的函数特性,推荐使用FLATTEN+ARRAYFORMULA+QUERY的组合公式来实现动态提取:
假设原始数据存放在名为「原始数据」的工作表中:
- A列:姓名
- B列:地点
- C列及以后:各条培训记录(格式为「培训名称|交付日期|完成日期」)
在目标工作表的A2单元格输入以下公式:
=QUERY(FLATTEN(ARRAYFORMULA(IF(原始数据!C2:Z<>"",原始数据!A2:A&"|"&原始数据!B2:B&"|"&原始数据!C2:Z,""))), "SELECT SPLIT(Col1, '|') WHERE Col1 IS NOT NULL LABEL SPLIT(Col1, '|') ''", 0)
公式说明:
- ARRAYFORMULA:批量遍历原始数据的每一行,将姓名、地点与非空的培训记录用
|拼接成完整字符串,跳过空的培训列 - FLATTEN:把所有拼接后的多行多列数据压缩成单列,实现“一行多培训”到“一行一培训”的转换
- QUERY:筛选掉空值,再将每个字符串按
|拆分成姓名、地点、培训名称、交付日期、完成日期5列,同时去掉默认的表头标签
适配调整:
- 如果原始数据的培训记录分隔符不是
|,替换公式中所有的'|'为实际分隔符(比如逗号',') - 如果培训列的范围超出C:Z,修改为实际列范围(比如
原始数据!C2:AA) - 若需调整输出列顺序,可修改QUERY的SELECT子句,例如:
=QUERY(FLATTEN(ARRAYFORMULA(IF(原始数据!C2:Z<>"",原始数据!A2:A&"|"&原始数据!B2:B&"|"&原始数据!C2:Z,""))), "SELECT SPLIT(Col1, '|')[0], SPLIT(Col1, '|')[2], SPLIT(Col1, '|')[1], SPLIT(Col1, '|')[3], SPLIT(Col1, '|')[4] WHERE Col1 IS NOT NULL LABEL SPLIT(Col1, '|')[0] '', SPLIT(Col1, '|')[2] '', SPLIT(Col1, '|')[1] '', SPLIT(Col1, '|')[3] '', SPLIT(Col1, '|')[4] ''", 0)
这个公式支持自动识别原始数据新增的行,无需手动更新。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

