在Excel查询编辑器中将CSV文件的文件夹与不同的列数组合在一起

时间:2018-06-11 18:07:16

标签: excel csv powerquery excel-2016

我有一个包含许多CSV文件的文件夹,其中前八列具有相同的标题,但在前八列之后列数不同。我试图在Excel 2016中使用查询和连接来完成此操作。

以下是CSV文件格式的示例(假设A - H中有字符串值):

----------------------------------------------------------------------------------------------------------------
|     A     |  B  |  C  |  D  |  E  |  F  |  G  |  H  | Company 1 | Value (1) | Company 2 | Value (2) | etc... |  
----------------------------------------------------------------------------------------------------------------  
| Product 1 |     |     |     |     |     |     |     |    .05    |   25.00   |    .08    |   14.00   |        |  
----------------------------------------------------------------------------------------------------------------  
| Product 2 |     |     |     |     |     |     |     |    .16    |   43.00   |    .06    |   18.00   |        |  
----------------------------------------------------------------------------------------------------------------  

再次:每个CSV文件的列A-H相同,但每个文件的公司/值数量不同(每个文件的公司名称不同)。

我已经完成了一个CSV文件的必要步骤,并希望有一些方法可以将其用作其他人的模板。

以下是我在Excel的查询编辑器中需要执行的步骤:

  • 删除一些“A-H”列(这些标题符合所有文件,不应该很难)
  • 删除所有“值(#)”列 - 每个CSV文件中的数量不同
  • 取消所有“公司#”列的显示(现在是匹配列A-H之后的每​​一列,因为在上一步中删除了“值(#)”列)
  • 将所有公司名称的列重命名为“公司”
  • 将每个公司之前的所有值重命名为“费用”


以下是“高级查询编辑器”中的应用步骤:

#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"A", type text}, {"B", type text}, {"C", type text}, {"D", type text}, {"E", type number}, {"F", type text}, {"G", Currency.Type}, {"H", Currency.Type}, {"Company 1", type text}, {"Value (1)", Currency.Type}, {"Company 2", type text}, {"Value (2)", Currency.Type}, {"Company 3", type text}, {"Value (3)", Currency.Type}, {"Company 4", type text}, {"Value (4)", Currency.Type}, {"Company 5", type text}, {"Value (5)", Currency.Type}, {"Company 6, type text}, {"Value (6)", Currency.Type}, {"Company 7", type text}, {"Value (7)", Currency.Type}, {"Company 8", type text}, {"Value (8)", Currency.Type}, {"Company 9", type text}, {"Value (9)", Currency.Type}}),
#"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"A", "C", "D", "E", "Company 1", "Company 2", "Company 3", "Company 4", "Company 5", "Company 6", "Company 7", "Company 8", "Company 9"}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Removed Other Columns", {"A", "C", "D", "E"}, "Attribute", "Value")

有没有办法导入CSV文件的文件夹并对每个文件应用上述步骤,因此只有一个查询所有CSV文件? (我希望它如何在下面看的简短例子)

----------------------------------------------------
|     A     |  C  |  D  |  E  |  Company  |  Cost  |  
----------------------------------------------------
| Product 1 |     |     |     | Company 1 |  .05   |
----------------------------------------------------
| Product 1 |     |     |     | Company 2 |  .08   |
----------------------------------------------------
| Product 2 |     |     |     | Company 1 |  .16   |
----------------------------------------------------
| Product 2 |     |     |     | Company 2 |  .06   |
----------------------------------------------------

1 个答案:

答案 0 :(得分:1)

我相信。这似乎有效。

首先选择获取数据(或新来源)>文件>文件夹并浏览到包含csv文件的文件夹,然后选择它并单击“确定”。然后再次单击“确定”

您会看到以下内容。

enter image description here

单击“编辑”按钮。

右键单击“内容”列,然后单击“删除其他列”。你会看到这样的事情。

enter image description here

单击右上角的按钮展开“内容”列,然后在出现的对话框中单击“确定”,如下所示。

enter image description here

在屏幕的左侧,在查询下,您会看到以下内容:

enter image description here

我突出显示的查询是您要完成工作的地方。请注意,它具有表格图标,并以转换示例文件开头。点击它。

在屏幕右侧的APPLIED STEPS下,单击 Source

在公式栏中,您应该看到如下内容:= Csv.Document(#"Sample File Parameter1",[Delimiter=",", Columns=12, Encoding=1252, QuoteStyle=QuoteStyle.None])。删除部分Columns=12,(从C到包括逗号的所有内容 - 它很可能与12不同)。

enter image description here

然后删除要从表格中删除的列。

enter image description here

点击转换>使用第一个标题行作为标题下拉箭头>使用标题作为第一行。

enter image description here enter image description here

点击转换>换位翻转桌子。

选择Column1下拉箭头>文字过滤器>不以>开头并键入Value并单击“确定”。

enter image description here

点击转换>移调以将桌子翻转回原来的方向。

点击转换>使用第一行作为标题。

选择除公司列以外的所有列,然后点击未展开列的下拉箭头> Unpivot其他列。 (不要直接选择和转动公司列。如我所说,间接地执行它应该从各种文件中捕获不同数量的公司列。)

enter image description here

在屏幕右侧的APPLIED STEPS下,删除每个 Changed Type 步骤。如果你不这样做,他们可能会导致你的查询窒息。

现在回到这个查询,这将是你的原始"主要"查询。当然,你的名字也是别的名字,但是你可以通过它的位置来了解它。点击它。

enter image description here

您可能会看到这样的错误。

enter image description here

删除屏幕右侧APPLED STEPS中的所有更改类型步骤。

你应该看到这样的东西。

enter image description here