本帖已被设为精华帖!
= Table.Combine(List.Transform({0..Number.RoundDown(Table.RowCount(源)/2)},each
[a=List.Range(Table.ToRows(源),_*2,2),
b=Table.FromRows(List.Transform({0..3},each {a{0}{_}?,null,null,null,a{1}?{_}?}))]
[b] ) )
= Table.Combine(List.Transform({0..Number.RoundDown(Table.RowCount(源)/2)},each
[a=List.Range(Table.ToRows(源),_*2,2),
b=Table.FromRows(List.Transform({0..3},each {a{0}{_}?,null,null,null,a{1}?{_}?}))]
[b] ) )
多谢@飞天篮球 !
@xiaoni
"?"的作用是下标越界容错,结果变成null 。
比如一个list {1,2}只有两个值 ,然后我们进行这样的深化取该list中第三个值时"= {1,2}{2} "会报错,
因为list中只有两个值,但是容错之后"={1,2}{2}?"结果就是null;
这个也同样适用于record,比如“= [a=1,b=2][c]?”结果是null。record中没有field "c","?"越界容错;
你也可以试试table深化,比如,一个空表“= #table({},{})”,深化其第一行“= #table({},{}){0}”,就会出错,
因为是空表,没有值。但容错之后就是null,"= #table({},{}){0}?"。
大概就是这个意思。
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
更改的类型 = Table.TransformColumnTypes(源,{{"品号", type text}, {"品名", type text}, {"规格", type text}}),
自定义1 = List.Split(List.Transform(Table.ToRows(更改的类型),each _&{null,null}),Number.RoundUp(List.Count(Table.ToRows(更改的类型))/2,0)),
自定义4 = List.Transform(自定义1,each List.Combine(_)),
自定义2 = List.InsertRange(自定义4,1,{{},{},{}}),
自定义3 = Table.FromColumns(自定义2)
in
自定义3
= Table.Combine(List.Transform({0..Number.RoundDown(Table.RowCount(源)/2)},each
[a=List.Range(Table.ToRows(源),*2,2),
b=Table.FromRows(List.Transform({0..3},each {a{0}{}?,null,null,null,a{1}?{_}?}))]
[b] ) )
Table.Combine(
List.Transform(
List.Transform(
{0..List.Count(源[品名])/2-1},
each List.Range( Table.ToRows(源) ,_*2,2)
),
(x)=>Table.FromColumns({x{0}&{null},{},{},{},x{1}})
)
)