合并和转置多个 excel 个文件

Combine and transpose multiple excel files

我有多个格式相同的 xls 文件。只有两列包含数据和其他我不需要的空列(C 到 I)。所有文件的第一列数据都相同,我需要将多个文件的第二列数据放入最终文件中它们自己的列中。我的输出文件应如下所示。我尝试了 power query 但我没有成功地做对。感谢任何帮助。

输入文件格式:

输出文件格式:

假设粘贴 link(在输出文件的 B2 中)完成后,link 看起来像这样:=[File1.xls]Sheet1!$B

将 link 稍微更改为 :

  1. 使“File1.xls”文本可根据 B1 值更改(B1 包含文件名,如图 2 所示)
  2. 如果没有数据则不显示'0'。
  3. 'Lock' B 列引用,但使行动态化(源数据是第 4 行以后)。

[过程]

[1] : 使用 INDIRECT()

[2] : 使用 IF(formula="","",formula)

[3] : 在正确的地方删除并应用 $

[1] 之后:=INDIRECT("["&B&"]Sheet1!$B")

在 [2] 之后:=IF(INDIRECT("["&B&"]Sheet1!$B")="","",INDIRECT("["&B&"]Sheet1!$B")

[3] 之后:=IF(INDIRECT("["&B&"]Sheet1!$B4")="","",INDIRECT("["&B&"]Sheet1!$B4")

注意间接使用了 B$1。所以复制粘贴后,在C列中,它会变成C$1(参考File2.xls,而不是File1.xls)

[解决方案]

在输出文件的单元格 B1 中,输入文件名。

在单元格 B2 中,输入 =IF(INDIRECT("["&B&"]Sheet1!$B4")="","",INDIRECT("["&B&"]Sheet1!$B4")(我假设工作表名称是 Sheet1,请根据粘贴 link 的样子进行编辑。)

向下拖动B2。如果单元格 C1(和其他列)有文件名,只需将 B2++ 单元格复制到 C2++ 单元格,公式将相应调整。

如果有请分享works/not。

powerquery 版本。从原始文件编辑为仅保留每个文件的前两列

let Source = Folder.Files("C:\directory\"),
#"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".xls")),
#"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", "GetFileData", {"Data", "Hidden", "Item", "Kind", "Name"}, {"Data", "Hidden", "Item", "Kind", "Sheet"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded GetFileData",{"Content", "Hidden", "Item", "Kind","Sheet"}),
#"Remove top 2 rows" = Table.TransformColumns(#"Removed Columns",{{"Data", each Table.Skip(Table.DemoteHeaders(_),3), type table}}),
#"Keep 2 columns only" = Table.TransformColumns(#"Remove top 2 rows",{{"Data", each Table.SelectColumns(_,List.FirstN(Table.ColumnNames(Table.DemoteHeaders(_)),2)), type table}}),
List = List.Union(List.Transform(#"Keep 2 columns only"[Data], each Table.ColumnNames(_))),
#"Expanded Data" = Table.ExpandTableColumn(#"Keep 2 columns only", "Data", List,List),
#"Pivoted Column" = Table.Pivot(#"Expanded Data", List.Distinct(#"Expanded Data"[Name]), "Name", "Column2")
in  #"Pivoted Column"