所谓特殊空格,是指在PowerQuery中,那些无法用替换值功能替换的空格。这类空格很讨嫌,但是往往这类空格具有特殊意义——比如,决定缩进。
虽然没法用替换的方式将这类空格替换成别的值,但是可以用修整(trim)命令来一次性删除所有这类空格,只保留需要的文本。
但是当这些空格代表层级的时候,不能简单清除它们,而必须将它们转化成某种层级形式。
仔细研究这些空格,发现其长度决定了层级的层次,所以,我们只需要获取这些空格的长度,就可以映射出层级来。
示例代码如下:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
更改的类型 = Table.TransformColumnTypes(源,{{"序号", Int64.Type}, {"名称", type text}, {"编码", type text}}),
含空格的字符串长度 = Table.AddColumn(更改的类型, "含空格的字符段长度", each Text.Length([名称])),
更改的类型2 = Table.TransformColumnTypes(含空格的字符串长度,{{"含空格的字符段长度", Int64.Type}}),
复制的列 = Table.DuplicateColumn(更改的类型2, "名称", "名称 - 复制"),
纯文本 = Table.TransformColumns(复制的列,{{"名称 - 复制", Text.Trim}}),
纯文本长度 = Table.AddColumn(纯文本, "纯文本长度", each Text.Length([#"名称 - 复制"])),
已添加自定义 = Table.AddColumn(纯文本长度, "空格长度", each [含空格的字符段长度]-[纯文本长度]),
重排序的列 = Table.ReorderColumns(已添加自定义,{"序号", "名称", "编码", "名称 - 复制", "含空格的字符段长度", "纯文本长度", "空格长度"})
in
重排序的列
最后结果如下:
可以看到,“空格长度”其实就是层级映射列:0表示最顶层,2表示次一层,4表示再次一层,以此类推。我们甚至可以用空格长度/2+1来获取每一行所在的层级,以及通过获取“空格长度”列的最大值来获取总共有多少层级,有这些信息之后,就可以很方便地重建原始数据中空格表示的层级了。