如何在Power Query中拆分CSV列表字段且避免数据重复
如何在Power Query中拆分CSV列表字段且避免数据重复
我完全懂你的困扰!用Power Query处理这个CSV的时候,默认的拆分展开总是把name和number重复绑定到每个列表项上,和你想要的简洁竖排格式完全不符对吧?别着急,咱们一步步来解决这个问题:
首先明确你的核心需求:把每一行的name、number,以及对应的多行列表项,按顺序竖排展示,而不是让name和number重复出现在每个列表项的行里。
操作步骤(带Power Query具体操作)
1. 正确导入CSV文件
打开Power Query编辑器,选择「从文件」→「从CSV」,找到你的目标文件。在导入设置里一定要注意:
- 分隔符选分号(
;)(你的CSV是用分号分隔的) - 把「数据类型检测」设为「无」,避免Power Query错误识别换行的列表内容为新行
导入后你应该能看到三列:name、number、list,其中list列是包含换行和编号的文本内容。
2. 清理list列的编号前缀
选中list列,切换到「转换」选项卡,点击「替换值」:
- 查找内容输入:
\d+\.(这是正则表达式,匹配所有「数字+句号+空格」的前缀) - 勾选「使用正则表达式」
- 替换为留空,点击确定
这一步会把1. item1这类内容变成item1,去掉多余的编号。
3. 生成每行的竖排条目列表
添加一个自定义列(「添加列」→「自定义列」),输入以下公式:
{[name], [number]} & Text.Split([list], "#(lf)")
这个公式的作用是:把当前行的name、number,和拆分后的所有列表项(按换行符#(lf)拆分)合并成一个有序列表。
4. 合并所有列表并转换成目标表格
- 选中刚添加的「竖排条目」列,切换到「转换」选项卡,点击「提取值」→ 分隔符选「换行」
- 接着把提取后的内容转成列表,再用「转换」→「转成表格」,生成只有一列的表格
- 最后插入表头行:在表格最上方插入三行,分别输入
name、number、list,就得到了你想要的格式
用M代码一键实现(直接复制到Power Query高级编辑器即可)
如果你想更高效,直接把下面的代码替换到Power Query的高级编辑器里,记得把文件路径改成你自己的CSV路径:
let 源 = Csv.Document(File.Contents("你的CSV文件路径"), [Delimiter=";", Encoding=1252, QuoteStyle=QuoteStyle.Csv]), 设置表头 = Table.PromoteHeaders(源, [PromoteAllScalars=true]), 清理列表编号 = Table.ReplaceValue(设置表头,"\d+\. ","",Replacer.ReplaceText,{"list"}), 生成竖排列表 = Table.AddColumn(清理列表编号, "竖排条目", each {[name], [number]} & Text.Split([list], "#(lf)")), 合并所有列表 = List.Combine(生成竖排列表[竖排条目]), 转成表格 = Table.FromList(合并所有列表, Splitter.SplitByNothing(), {"内容"}), 添加表头行 = Table.InsertRows(转成表格, 0, {[内容="name"], [内容="number"], [内容="list"]}) in 添加表头行
为什么之前会出现重复?
你之前用的默认拆分展开,本质是把每个列表项和当前行的name、number做笛卡尔积,也就是每个列表项都对应一遍当前行的name和number,所以才会出现大量重复。而我们现在的方法是把每行的内容按顺序拼接成竖排的条目,完全避免了重复。
备注:内容来源于stack exchange,提问作者tbeest
相关产品推荐
相关产品推荐

