两种笨方法
方法一:函数递归
let
源 = Excel.CurrentWorkbook(){[Name = "表1"]}[Content],
Data = Table.TransformColumnTypes(源, {{"level", type text}}),
L3 = Table.SelectRows(Data, each Text.Length([level]) = 3),
重命名的列 = Table.RenameColumns(L3,{{"name", "level3"}}),
query = Record.FromList(Data[name],Data[level]),
fx = (x) => if Table.ColumnCount(x) = 4 then x else @fx(Table.AddColumn(x,"level"&Text.From(4-Table.ColumnCount(x)),each Record.FieldOrDefault(query,Text.Start([level],4-Table.ColumnCount(x))))),
自定义1 = fx(重命名的列),
删除的列 = Table.RemoveColumns(自定义1,{"level"}),
重排序的列 = Table.ReorderColumns(删除的列,{"level1", "level2", "level3"})
in
重排序的列
方法二:List.Generate将生成三张表,最终取最后一张表也能得到这个结果!
let
源 = Excel.CurrentWorkbook(){[Name = "表1"]}[Content],
Data = Table.TransformColumnTypes(源, {{"level", type text}}),
L3 = Table.SelectRows(Data, each Text.Length([level]) = 3),
int = Table.RenameColumns(L3,{{"name", "level3"}}),
query = Record.FromList(Data[name],Data[level]),
Generate = List.Generate(()=> int ,each Table.ColumnCount(_) <= 4 , each Table.AddColumn(_ ,"level"&Text.From(4-Table.ColumnCount(_)),(x)=>Record.FieldOrDefault(query,Text.Start(x[level],4-Table.ColumnCount(_)),null))),
取最后结果 = List.Last( Generate),
删除的列 = Table.RemoveColumns(取最后结果,{"level"})
in
删除的列 |