【问题标题】:How can I combine multiple CSV files with different column names and column order in Excel?如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?
【发布时间】:2020-11-24 22:01:58
【问题描述】:

我有 350 多个 CSV 文件需要合并到一个汇总文件中。 Using Power Query for Excel,我可以在几分钟内轻松合并所有文件。但是,经过检查,并非所有文件都遵循相同的列顺序或名称。例如,一些文件经过:

first, last, address, city, state, username

但其他一些文件通过:

address1, address2, city, state, last_name, first_name, age

使用 Power Query、Excel、VBA 或其他工具 - 有没有办法有效地合并具有不同列名和列顺序的多个 CSV 文件?我尝试在线搜索,但没有一个解决方案与我正在寻找的内容相关 (example)。

上面例子的最终结果应该是这样的:

username, last_name, first_name, age, address1, address2, city, state

一张纸中不存在的任何额外列都可以是空白的(或null),并且最终的列顺序无关紧要,因为以后可以重新排列。

【问题讨论】:

  • 文件是否有标题,您可以检查它们以了解它们的顺序?

标签: excel vba csv powerquery m


【解决方案1】:

类似于this related postTable.Combine 函数应该可以解决问题,假设您有要匹配列的标题。

通过从文件夹加载加载 CSV 文件,将 CSV 转换为表格格式并提升标题,然后与 Table.Combine 结合。

let
    Source = Folder.Files("C:\Path\To\Folder\With\CSVs"),
    #"Added Custom" = Table.AddColumn(Source, "CSV", each Table.PromoteHeaders(Csv.Document([Content]))),
    #"Combine CSVs" = Table.Combine(#"Added Custom"[CSV])
in
    #"Combine CSVs"

【讨论】:

  • Table.Combine 看起来像我需要的东西。我运行了您提供的查询,当我查看预览时,它看起来像预期的那样工作。但是,当我保存并加载新合并的数据时,到目前为止,它仍在加载和计数 30+ 百万行。我知道我总共只有 100k+ 行。为什么它会产生这么多?
  • 我不知道这是怎么回事,除非它正在拾取该文件夹中您不打算处理的其他文件。如果您在#"Added Custom" 之前将文件列表过滤到少数几个,它会像您预期的那样运行吗?
  • 该文件夹只有我正在合并的 CSV。我只用了 5 个文件就完成了,它按预期出来了。然而,如果我对同一个文件夹中的所有 350 个文件都这样做,它会达到数百万。有限制吗?我在“添加列”>“自定义列”中添加了您的公式。运行后,我展开新的自定义列。然后,我预览了所有列,在预览中两次看起来都像预期的结果
  • 当我回去手动统计一小批文件的记录总数时,应该是6000条。但是当我对同一小批文件运行查询时,它是 60,000。所以我看了看桌子,它被复制了。我删除了骗子,然后它最终与我手动计算的总数相匹配。有什么办法可以防止重复?
  • 我无法重现您所描述的复制行为,所以我不知道发生了什么。
猜你喜欢
  • 2019-07-13
  • 2021-09-10
  • 1970-01-01
  • 2021-10-04
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多