Powerquery:将多值单元格拆分到空单元格下方

Powerquery: split multi-value cell to below empty cells

我正在通过 Powerquery 将 pdf 文件中的大量表格导入 Excel - 效果很好。

除了其他几个迁移之外,我还有以下无法解决的任务:

在某些情况下 - 特别是。分页后 - 应该进入单个单元格(一个在另一个单元格下方)的单个值被放入一个由换行符连接的单元格中,下面的单元格为空。

我需要拆分这样一个单元格的值(单元格内容包含换行符)并将第 2 到第 n 个值放入该单元格下方相应的空单元格中。

(这是一种“拆分钻取”...)

我是 M 的新手(不是 VBA 或编程),但我找不到可行的解决方案。

右键单击列

转换数据类型文本

右键单击列 ... 拆分列 ... 按分隔符 ... 高级选项,使用特殊字符拆分 [x] .. 拆分为行

然后使用该列顶部的箭头过滤掉空行

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Column2", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column2"),
#"Filtered Rows" = Table.SelectRows(#"Split Column by Delimiter", each ([Column2] <> null)),
in #"Filtered Rows"

这很难可靠地做到,但您可以按照@horseyride 的建议在换行符上使用 Text.Split 进行扩展,并删除第二列上的空白行,然后将这些列与 [=12 一起粉碎=].

这是一个您可以粘贴到高级编辑器中的示例:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUUoEYkMDpVgdCDcJiI0gXCMgMxkkawrnpsTkpcbkpYEEjeCCIJ4FMs8IImcMZKaDJI3h3AwQ11wpNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Week = _t, A = _t, B = _t]),
    TransformA = List.Select(List.Combine(List.Transform(Source[A], each Text.Split(_, "#(lf)"))), each Text.Length(_) > 0),
    FromCols = Table.FromColumns({Source[Week], TransformA, Source[B]}, {"Week", "A", "B"})
in
    FromCols

这需要像这样开始 table:

A 列转换为列表,拆分换行符上的每个元素,将每个结果重新组合在一起,并过滤掉 null 和空字符串:

最后一步采用原始 table 中的 WeekB 列,并将转换后的 A 列放在中间:

如果额外展开的行数与删除的空白行数不完全匹配,您将 运行 遇到麻烦,但这应该在它们匹配的假设下起作用。