如何用Power Query合并含不同列的多工作表并保留表名
在Power Query合并工作表时添加工作表名称的解决方案
你现在的问题是合并多个工作表后,结果里没带上对应的工作表名称,而且不想给每个工作表单独建表格。你的现有M代码已经完成了合并和过滤,但少了添加工作表名称的步骤,修改起来很简单:
核心思路是在合并所有表之前,给每个工作表的数据表添加一个固定值列,值就是该工作表的名称,具体修改如下:
修改后的M代码
let Source = Excel.Workbook(File.Contents("C:\Users\ADMIN2\Documents\TEST.xlsx"), null, true), #"Filter Sheets" = Table.SelectRows(Source, each [Kind] = "Sheet"), #"Promote Headers" = Table.TransformColumns(#"Filter Sheets", {{"Data", each Table.PromoteHeaders(_, [PromoteAllScalars=true])}}), // 新增步骤:给每个数据表添加"工作表名称"列,值对应原表的Name字段 #"Add Sheet Name Column" = Table.AddColumn(#"Promote Headers", "Data with Sheet Name", each Table.AddColumn([Data], "工作表名称", (x) => [Name])), // 合并带工作表名称的数据表 #"Combine Sheets" = Table.Combine(#"Add Sheet Name Column"[Data with Sheet Name]), #"Filtered Rows" = Table.SelectRows(#"Combine Sheets", each [KODE] <> null and [KODE] <> "") in #"Filtered Rows"
关键修改说明
- 新增
#"Add Sheet Name Column"步骤:用Table.AddColumn给每个行的Data数据表插入一个名为工作表名称的列,列值就是当前行的[Name](也就是工作表的名称) - 合并的时候,不再直接合并原
Data列,而是合并新增的Data with Sheet Name列里的表
这样处理后,合并出来的结果就会包含每条记录对应的工作表名称,和你期望的结果一致。
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

