如何解决如何将52个文件中的前两行合并为标题行,并在Power Query中将所有文件合并为一个文件?
我有52个文件,列数超过50。每行的前两行都是标题行,因此需要将它们合并为一行,而我想将它们全部合并为一个文件。
有些文件具有不同的列数或不同的列名,因此,如果PowerQuery识别出这些文件,我可以将它们分开处理。
我能想到的唯一方法是打开每个文件,运行一个宏以合并所有文件中的前两行,但是在Power查询所有文件中是否有更有效的方法呢?
谢谢!
解决方法
如果文件具有相同的结构,并且需要合并它们,则可以使用'Load from Folder'选项。您可以照常浏览文件夹选项中的加载,然后选择“合并和转换数据”。
在查询编辑器中,查找“帮助程序查询”。
此查询使用文件的选定示例来确定其余文件加载的元数据。如果您查看“转换样本文件”,则可以逐步添加以合并行。加载时,它将对文件夹中的每个文件应用此处的任何步骤。 然后,您可以“将第一行用作标题”将合并的行升级为标题。如果Power Query已经这样做,则可能需要删除自动应用的提升标题步骤。
完成后,它将把文件合并到Power Query中的一个表中。最好对一组样本文件执行此操作,以查看其是否有效,然后添加其余文件。对于那些结构不同的文件,可能会有些混乱,因此最好为它们创建不同的文件夹并以这种方式加载它们。
,let Source = Folder.Files("C:\directory\subdirectory"),#"Filtered Rows" = Table.SelectRows(Source,each ([Extension] = ".xlsx")),// get all data from all XLS files
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Name","Content"}),#"Added Custom" = Table.AddColumn(#"Removed Other Columns","GetFileData",each Excel.Workbook([Content],true)),#"Expanded GetFileData" = Table.ExpandTableColumn(#"Added Custom",{"Data","Hidden","Item","Kind","Name"},"Sheet"}),// filter for specific sheet
#"Filtered Rows1" = Table.SelectRows(#"Expanded GetFileData",each ([Sheet] = "Sheet1")),#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows1",{"Content","Kind"}),//demote,then combine first two rows of each column,then recombine with original data
#"Added Custom1" = Table.AddColumn(#"Removed Columns","Top",each Table.TransformColumnTypes(Table.Transpose(Table.FirstN(Table.DemoteHeaders([Data]),2)),{{"Column1",type text},{"Column2",type text}})),#"Added Custom2" = Table.AddColumn(#"Added Custom1","Bottom",each Table.Transpose(Table.CombineColumns([Top],{"Column1","Column2"},Combiner.CombineTextByDelimiter(" ",QuoteStyle.None),"Merged"))),#"Added Custom3" = Table.AddColumn(#"Added Custom2","Data3",each Table.PromoteHeaders( [Bottom] & Table.Skip(Table.DemoteHeaders([Data]),2))),// expand all columns and remove extras
List = List.Union(List.Transform(#"Added Custom3"[Data3],each Table.ColumnNames(_))),#"Expanded Data" = Table.ExpandTableColumn(#"Added Custom3",List,List),#"Removed Columns1" = Table.RemoveColumns(#"Expanded Data","Bottom"})
in #"Removed Columns1"
这就是我要做的
-
打开目录中的所有xlsx文件(根据需要更改扩展名和路径)
-
读取每个文件中所有标签上的所有列
-
在每个数据表中,合并每列的前两行,然后与 数据
-
然后展开所有表
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。