【问题标题】:Combining multiple sheets with different columns using Power Query使用 Power Query 将具有不同列的多个工作表组合在一起
【发布时间】:2020-11-19 06:48:54
【问题描述】:

我有一个包含多个页面的工作簿,这些页面需要合并(即堆叠)到一个表格中。虽然它们有许多相似的列名,但它们并不都具有相同的列并且列顺序不同。因此,我不能使用固有的合并功能,因为它使用列顺序。 Table.Combine 将解决这个问题,但我想不出创建一个语句来使用“每个”机制来做到这一点。

对于 x 工作簿中的每个工作表 Table.Combine(上一张,下一张) 返回所有堆叠的工作表。

有人可以帮忙吗?

【问题讨论】:

    标签: powerquery


    【解决方案1】:

    如果您使用 Excel.Workbook 加载工作簿,您可以选择 Sheet 种类(而不是 TableDefinedName 种类)并忽略工作表名称。

    let
        Source = Excel.Workbook(File.Contents("C:\Path\To\File\FileName.xlsx"), null, true),
        #"Filter Sheets" = Table.SelectRows(Source, each [Kind] = "Sheet"),
        #"Promote Headers" = Table.TransformColumns(#"Filter Sheets", {{"Data", each Table.PromoteHeaders(_, [PromoteAllScalars=true])}}),
        #"Combine Sheets" = Table.Combine(#"Promote Headers"[Data])
    in
        #"Combine Sheets"
    

    【讨论】:

    • 嗨亚历克西斯,这是我尝试过的,但不起作用。它不起作用的原因是它根据列位置组合文件,这是这里的列名。我们需要在合并之前将每张工作表的第一行提升为列名。因此,它需要您通过“过滤表”执行的操作,然后提升第一行,然后组合该结果。
    • 好点。我已将该促销添加为我的代码中的一个新步骤。
    • 干得好,先生。我不认为只是推广每个标题然后合并。不错!
    【解决方案2】:
    • 将每个表作为单独的查询加载到 Power Query 中
    • 根据需要为每个单独的查询修复列名
    • 将每个查询保存为一个连接
    • 在其中一个查询中(或在单独的查询中)使用追加命令来追加现在具有相同列名的所有已修复查询。

    【讨论】:

    • 感谢您的快速回复。不起作用的原因是工作表名称会随着时间而改变。我需要一个程序化的解决方案。我知道可以做到,只是不知道怎么做。 :)
    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多