您可以使用 Excel 2010+ 中提供的 Power Query 将原始表格转换为所需的输出
- 在 Data 选项卡上选择 Get&Transform from Table/Range(这在不同版本中可能有所不同)
- 添加索引列。
- 选择索引列,然后选择
UNPIVOT other columns
- 添加另一个从零开始的索引列
- 选择这个新的 Index 列,然后添加 Integer/Divide (by 2) 列。
- 再次选择相同的索引列,添加模(乘以 2)列。
- 删除您第二次添加的从零开始的索引列。
- 选择模数列和轴
- 对于 Values 列,选择 Value(包含所有数据的列的默认名称
- 在
Advanced 选项下选择Don't Aggregate
- 删除多余的列
- 将旋转列从
0 | 1 重命名为您想要的任何内容(我不理会它们)
- 按数字列对行进行排序
所有步骤都可以在 UI 中完成,但下面是 M 代码,您可以根据需要将其粘贴到高级编辑器中。您必须更改源表名称以匹配 Excel 中的任何内容。
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", Int64.Type}, {"Column4", type text}, {"Column5", Int64.Type}, {"Column6", type text}, {"Column7", Int64.Type}, {"Column8", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Attribute"}),
#"Added Index1" = Table.AddIndexColumn(#"Removed Columns", "Index.1", 0, 1),
#"Inserted Integer-Division" = Table.AddColumn(#"Added Index1", "Integer-Division", each Number.IntegerDivide([Index.1], 2), Int64.Type),
#"Inserted Modulo" = Table.AddColumn(#"Inserted Integer-Division", "Modulo", each Number.Mod([Index.1], 2), type number),
#"Removed Columns1" = Table.RemoveColumns(#"Inserted Modulo",{"Index.1"}),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns1", {{"Modulo", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Removed Columns1", {{"Modulo", type text}}, "en-US")[Modulo]), "Modulo", "Value"),
#"Removed Columns2" = Table.RemoveColumns(#"Pivoted Column",{"Index", "Integer-Division"}),
#"Sorted Rows" = Table.Sort(#"Removed Columns2",{{"0", Order.Ascending}}),
#"Changed Type1" = Table.TransformColumnTypes(#"Sorted Rows",{{"0", Int64.Type}, {"1", type text}})
in
#"Changed Type1"