合并和转置多个 excel 个文件
Combine and transpose multiple excel files
我有多个格式相同的 xls 文件。只有两列包含数据和其他我不需要的空列(C 到 I)。所有文件的第一列数据都相同,我需要将多个文件的第二列数据放入最终文件中它们自己的列中。我的输出文件应如下所示。我尝试了 power query 但我没有成功地做对。感谢任何帮助。
输入文件格式:
输出文件格式:
假设粘贴 link(在输出文件的 B2
中)完成后,link 看起来像这样:=[File1.xls]Sheet1!$B
将 link 稍微更改为 :
- 使“File1.xls”文本可根据 B1 值更改(B1 包含文件名,如图 2 所示)
- 如果没有数据则不显示'0'。
- '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"
我有多个格式相同的 xls 文件。只有两列包含数据和其他我不需要的空列(C 到 I)。所有文件的第一列数据都相同,我需要将多个文件的第二列数据放入最终文件中它们自己的列中。我的输出文件应如下所示。我尝试了 power query 但我没有成功地做对。感谢任何帮助。
输入文件格式:
输出文件格式:
假设粘贴 link(在输出文件的 B2
中)完成后,link 看起来像这样:=[File1.xls]Sheet1!$B
将 link 稍微更改为 :
- 使“File1.xls”文本可根据 B1 值更改(B1 包含文件名,如图 2 所示)
- 如果没有数据则不显示'0'。
- '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"