需求:将表1转换为表2的样式
解决办法
给出基于Excel2016及以上版本的PowerQuery解法:
思路其实比较简单:原始数据里需要根据1、2、3这样的序号列对数据分组,分组的时候,用Table.Transpose把每组数据从竖排变为横排,就完成了。
代码如下:
let
源 = Folder.Files(path),
删除的列 = Table.RemoveColumns(源,{"Extension", "Date accessed", "Date modified", "Date created", "Attributes"}),
删除的其他列 = Table.SelectColumns(删除的列,{"Content"}),
已添加自定义 = Table.AddColumn(删除的其他列, "自定义", each Excel.Workbook([Content])),
删除的其他列1 = Table.SelectColumns(已添加自定义,{"自定义"}),
自定义 = 删除的其他列1{0}[自定义],
Sheet1_Sheet = 自定义{[Item="Sheet1",Kind="Sheet"]}[Data],
分组的行 = Table.Group(Sheet1_Sheet, {"Column1"}, {{"data", each Table.Transpose(Table.FromList(_[Column2]))}}),
重命名的列 = Table.RenameColumns(分组的行,{{"Column1", "分组"}}),
展开 = Table.ExpandTableColumn(重命名的列, "data", List.Distinct(List.Combine(List.Transform(重命名的列[data],Table.ColumnNames))))
in
展开
关键步骤是这一步:
分组的行 = Table.Group(Sheet1_Sheet, {"Column1"}, {{"data", each Table.Transpose(Table.FromList(_[Column2]))}}),
注意我分组时合并了几个步骤。
操作指引
把你的原始数据放到某个文件夹下,确保该文件夹下除了原始数据没有其他文件。
然后新建一个Excel文件,再把上面的代码用下面的方式粘贴到PowerQuery编辑器:
粘贴后记住把path改为你原始数据所在的文件夹。
注意,这种方法只适合经常需要做同样处理的情形,偶尔做一次还不如其他大神提供的公式法简单快捷。