在 Excel 查询编辑器中合并具有不同列数的 CSV 文件文件夹
Combine folder of CSV files with different number of columns in Excel Query Editor
我有一个包含许多 CSV 文件的文件夹,其中前八列具有相同的 header,但前八列之后的列数量不同。我正在尝试使用 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 列相同,但每个文件的数量不同 Companies/Values(每个文件的公司名称不同)。
我已经为一个 CSV 文件完成了必要的步骤,并希望有某种方法可以将它用作其他文件的模板。
以下是我需要在 Excel 的查询编辑器中执行的步骤:
- 删除一些 "A-H" 列(这些 header 匹配所有文件,应该不难)
- 删除所有 "Value (#)" 列 - 每个 CSV 文件中的列数不同
- 逆透视所有 "Company #" 列(现在是匹配列 A - H 之后的每一列,因为 "Value (#)" 列在上一步中被删除)
- 将包含所有公司名称的列重命名为 "Company"
- 将包含每个公司之前所有值的列重命名为 "Cost"
这是 'Advanced Query Editor':
中的应用步骤
#"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 |
----------------------------------------------------
我相信是的。这似乎有效。
从 select 获取数据(或新源)> 文件 > 文件夹开始,然后浏览到包含 csv 文件的文件夹和 select,然后单击确定。然后再次单击“确定”。
您会看到如下内容。
单击“编辑”按钮。
Right-click 内容列并删除其他列。你会看到类似这样的东西。
单击右上角的按钮展开“内容”列,然后在出现的对话框中单击“确定”,如下所示。
在屏幕左侧的“查询”下,您会看到如下内容:
我突出显示的查询是您要进行工作的地方。请注意,它有一个 table 图标 并以 Transform Sample File 开头。点击它。
在屏幕右侧的应用步骤下,单击来源。
在公式栏中,您应该会看到类似这样的内容:= Csv.Document(#"Sample File Parameter1",[Delimiter=",", Columns=12, Encoding=1252, QuoteStyle=QuoteStyle.None])
。删除部分,Columns=12,
(从 C 到逗号的所有内容——它很可能与 12 的数字不同)。
然后从 table.
中删除您想要删除的列
单击“转换”> 使用第一 Header 行作为 Headers 下拉箭头 > 使用 Headers 作为第一行。
单击变换 > 转置以翻转 table。
Select Column1 下拉箭头 > 文本过滤器 > 不以开头 > 并键入 Value
并单击确定。
单击“变换”>“转置”将 table 翻转回其原始方向。
单击转换 > 将第一行用作 Headers。
Select 除公司列之外的所有列,然后单击逆透视列下拉箭头 > 逆透视其他列。 (不要 select 并直接旋转 Company 列。像我说的那样间接进行,应该从各种文件中捕获不同数量的公司列。)
在屏幕右侧的 APPLIED STEPS 下,删除每个 Changed Type 步骤。如果不这样做,它们可能会导致您的查询阻塞。
现在返回此查询,这将是您最初的 "main" 查询。当然,你的名字叫别的名字,但你会通过它的位置知道它。点击它。
您可能会看到这样的错误。
删除屏幕右侧应用步骤中的所有更改类型 步骤。
你应该看到这样的东西。
我有一个包含许多 CSV 文件的文件夹,其中前八列具有相同的 header,但前八列之后的列数量不同。我正在尝试使用 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 列相同,但每个文件的数量不同 Companies/Values(每个文件的公司名称不同)。
我已经为一个 CSV 文件完成了必要的步骤,并希望有某种方法可以将它用作其他文件的模板。
以下是我需要在 Excel 的查询编辑器中执行的步骤:
- 删除一些 "A-H" 列(这些 header 匹配所有文件,应该不难)
- 删除所有 "Value (#)" 列 - 每个 CSV 文件中的列数不同
- 逆透视所有 "Company #" 列(现在是匹配列 A - H 之后的每一列,因为 "Value (#)" 列在上一步中被删除)
- 将包含所有公司名称的列重命名为 "Company"
- 将包含每个公司之前所有值的列重命名为 "Cost"
这是 'Advanced Query Editor':
#"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 |
----------------------------------------------------
我相信是的。这似乎有效。
从 select 获取数据(或新源)> 文件 > 文件夹开始,然后浏览到包含 csv 文件的文件夹和 select,然后单击确定。然后再次单击“确定”。
您会看到如下内容。
单击“编辑”按钮。
Right-click 内容列并删除其他列。你会看到类似这样的东西。
单击右上角的按钮展开“内容”列,然后在出现的对话框中单击“确定”,如下所示。
在屏幕左侧的“查询”下,您会看到如下内容:
我突出显示的查询是您要进行工作的地方。请注意,它有一个 table 图标 并以 Transform Sample File 开头。点击它。
在屏幕右侧的应用步骤下,单击来源。
在公式栏中,您应该会看到类似这样的内容:= Csv.Document(#"Sample File Parameter1",[Delimiter=",", Columns=12, Encoding=1252, QuoteStyle=QuoteStyle.None])
。删除部分,Columns=12,
(从 C 到逗号的所有内容——它很可能与 12 的数字不同)。
然后从 table.
中删除您想要删除的列单击“转换”> 使用第一 Header 行作为 Headers 下拉箭头 > 使用 Headers 作为第一行。
单击变换 > 转置以翻转 table。
Select Column1 下拉箭头 > 文本过滤器 > 不以开头 > 并键入 Value
并单击确定。
单击“变换”>“转置”将 table 翻转回其原始方向。
单击转换 > 将第一行用作 Headers。
Select 除公司列之外的所有列,然后单击逆透视列下拉箭头 > 逆透视其他列。 (不要 select 并直接旋转 Company 列。像我说的那样间接进行,应该从各种文件中捕获不同数量的公司列。)
在屏幕右侧的 APPLIED STEPS 下,删除每个 Changed Type 步骤。如果不这样做,它们可能会导致您的查询阻塞。
现在返回此查询,这将是您最初的 "main" 查询。当然,你的名字叫别的名字,但你会通过它的位置知道它。点击它。
您可能会看到这样的错误。
删除屏幕右侧应用步骤中的所有更改类型 步骤。
你应该看到这样的东西。