-2
  1. 根据 image1,文件夹中有不固定数量的 excel 文件。
    (路径可能会改变,寻找解决方案作为任何单元格的动态路径)
  2. 每个文件的张数不固定(最多 10 张)。
  3. 每张表有大约 10 到 40 行作为交易数据。
  4. 在交易数据之后有两个摘要 - 数量和金额(未固定的起始行)3a、3b、3c
    我正在寻找最终输出为图像 4a、4b。使用电量查询。

excel文件的文件夹路径;它可能会改变。

存档的样本数据表

需要最终输出(两张单独的表格和两张桌子)

所有像素合二为一

4

1 回答 1

0

很抱歉这个回复的长度,但涉及到很多步骤,我也包括了相当多的屏幕剪辑。我相信这个解决方案可以满足您的需求。

我从文件夹中的文件开始:

在此处输入图像描述

Feb-19.xlsx 包含两个选项卡:

1. 德: 2. 加利福尼亚州:

Jan-19.xlsx 包含三个选项卡:

1. 美国: 2. 英国: 3. 中文:

我打开一个新的 Excel 文件,然后单击数据 > 新查询 > 从文件 > 从文件夹,然后输入或使用浏览按钮导航到包含文件的文件夹的位置。(当我导航到我的 OneDrive 文件夹时,我的路径中有 SkyDrive.old,但它是您在上面第一张图片中看到的我的 OneDrive 文件夹。)然后我单击确定:

在此处输入图像描述

然后我点击转换数据:

在此处输入图像描述

这出现:

在此处输入图像描述

我单击主页 > 管理参数(带有下拉箭头的单词)> 新参数,然后像这样设置它,然后单击确定。

在此处输入图像描述

点击确定后出现:

在此处输入图像描述

您可以看到我输入了包含文件的文件夹的路径。如果我想使用不同的文件夹路径,我可以稍后更改此参数值。

为此,我将单击在此处输入图像描述左窗格中的 。单击它会将我带到同一个地方,在那里我可以编辑值。

现在,我点击我已经开始的查询。它目前是左窗格中唯一的其他项目。单击它会在屏幕上显示它:

在此处输入图像描述

我在编辑栏中编辑文本,替换"C:\Users\MARC_000\SkyDrive.old\Test"FolderPath. 结果是完全相同的表,但公式栏有Folder.Files(FolderPath). 现在,查询不是使用硬编码引用,而是使用参数值。

然后,正因为我想,我将查询的名称更改为“主查询”。您可以通过单击左窗格中的查询,然后在右窗格顶部的 PROPERTIES 中更改名称来做到这一点。

接下来,我选择ContentName列,然后选择 Home > Remove Columns(带有下拉箭头的单词)> Remove Other Columns 得到这个:

在此处输入图像描述

然后我单击在此处输入图像描述按钮以合并Content列中的文件,这会弹出此弹出窗口。然后我只点击文件夹,然后确定。

在此处输入图像描述

现在左窗格中有更多查询条目:

在此处输入图像描述

我单击新查询Transform Sample File from Test,然后看到:

在此处输入图像描述

我选择DataItem列,然后 Home > Remove Columns(单词,带有下拉箭头)> Remove Other Columns 得到这个:

在此处输入图像描述

---请参阅答案底部的编辑,替换以下内容---

然后我单击在此处输入图像描述按钮展开数据列中的表,这会弹出此弹出窗口。然后我清除“使用原始列名作为前缀”旁边的复选框,然后单击“确定”。

在此处输入图像描述

---从答案底部的编辑返回继续---

这产生了这个:

在此处输入图像描述

然后我从Column1列中过滤掉空值。(单击列顶部的向下箭头并取消选择 null。)

然后我点击 Add Column > Conditional Column,并像这样设置它,然后点击 OK:

在此处输入图像描述

这产生了这个:

在此处输入图像描述

然后我选择新的自定义列并单击变换>填充>向下,得到这个:

在此处输入图像描述

然后我从Column1列中过滤掉“摘要(金额)”和“摘要(单位)”条目。(单击列顶部的向下箭头并取消选择“汇总(金额)”和“汇总(单位)”。)这会产生:

在此处输入图像描述

现在我回到主查询。换句话说,单击左侧窗格中的主查询。会有一个“问题”。我需要做的就是删除右窗格中的最后一个应用步骤:更改类型。一旦我删除它,一切都很好,我看到了:

在此处输入图像描述

但我也想要文件名,所以我点击当前选择的那个之前的应用步骤,选择“测试中的扩展转换文件”,所以我点击“删除其他列 1”,然后在公式栏中,我将代码从 更改Table.SelectColumns(#"Filtered Hidden Files1", {"Transform File from Test"})Table.SelectColumns(#"Filtered Hidden Files1", {"Transform File from Test", "Name"})。这添加了Name列,我看到了这个:

在此处输入图像描述

然后我回到最后一个 APPLIED STEP,即“Expanded Transform File from Test”,现在我看到了:

在此处输入图像描述

然后我点击转换>使用第一行作为标题并得到这个:

在此处输入图像描述

然后我将DE列重命名为Sheet并将Feb-19.xlsx列重命名为File Name

然后我从“客户名称”列中过滤掉“客户名称”条目。(单击列顶部的向下箭头并取消选择“客户名称”。)这会产生:

在此处输入图像描述

然后我对列重新排序以获得这个:

在此处输入图像描述

然后我选择Summary Type列并单击 Transform > Group By,然后像这样填写弹出框并单击 OK:

在此处输入图像描述

这会产生这个(这是你的两个表):

在此处输入图像描述

然后我右键单击左侧窗格中的主查询,然后选择参考。这给了我一个名为 Main Query (2) 的新查询,其中的表看起来就像上面的最后一张图片。现在我单击摘要(单位)行中的表格并得到以下信息:

在此处输入图像描述

然后我重复摘要(金额)的过程:我右键单击左侧窗格中的主查询,选择参考,然后单击新查询的摘要(金额)行中的表以获取此信息:

在此处输入图像描述

最后,我将两个最新查询重命名为“Summary (Units)”和“Summary (Amount)”

当您关闭并加载时,这将为您提供三个新的工作表。每个查询一个。如果您不想要主查询的工作表(如果您只想要摘要(单位)和摘要(金额)),那么在您关闭并加载并返回 Excel 后,单击数据 > 显示查询。然后右键单击右侧窗格中的主查询并单击加载到,然后选择“仅创建连接”并单击加载。当您收到数据丢失警告时,单击继续。

最后一件事:不要包含此查询的 Excel 工作簿与它从中获取信息的文件一起放在其源文件夹中。保持分开。

---编辑以适应具有交易信息的顶行---

我正在添加以下内容来处理汇总表上方可能包含信息行的工作表。这是我想出的:

在上面的答案中,在我说的步骤之后立即开始:我选择DataItem列,然后 Home > Remove Columns(带有下拉箭头的单词)> Remove Other Columns 得到这个:

在此处输入图像描述

我现在添加另一列(添加列 > 自定义列),并像这样设置它:

在此处输入图像描述

这会复制Data列,但会在每个嵌套表中添加一个索引,如下所示:

在此处输入图像描述

然后我添加另一列以确定与每个嵌套表中每个摘要的开头相关联的索引号:

在此处输入图像描述您可能要搜索“摘要(”或“摘要(单位)”而不是“摘要”

请注意,它的构造类似于前一列,因为它基本上是索引列的副本,只是在每个嵌套表中添加了汇总索引列。

在此处输入图像描述

然后我像这样添加另一列,以确定每个嵌套表的第一个汇总表第一行的索引位置:

在此处输入图像描述

得到这个:

在此处输入图像描述

然后我再添加一个这样的列,以删除每个嵌套表中我不想要的顶行:

在此处输入图像描述

这给了我这个:

在此处输入图像描述这张图片中选择的表格是顶部有额外信息的表格。该信息现在已经消失了。)

然后我选择TopRowsRemovedItem列,然后选择 Home > Remove Columns(带有下拉箭头的单词)> Remove Other Columns 得到这个:

在此处输入图像描述

然后,我单击在此处输入图像描述按钮以展开TopRowsRemoved列中的表(而不是我们之前所做的Data列),这会弹出这个看起来与我们使用Data列时完全相同的弹出窗口。然后我清除“使用原始列名作为前缀”旁边的复选框,然后单击“确定”。

在此处输入图像描述

然后我在右侧窗格中的 APPLIED STEPS 下删除旧的 Expanded Data 步骤。如果我不删除 Expanded Data 步骤,我会收到错误消息,因为它正在查找不存在的Data列。这次我没有使用数据列。相反,我使用了TopRowsRemoved列。

在这一点上,我之前的答案的其余部分仍然适用,所以请参考上面我写的地方---从答案底部的编辑返回继续---。

这是“主查询”查询的 M 代码:

let
Source = Folder.Files(FolderPath),
#"Removed Other Columns" = Table.SelectColumns(Source,{"Content", "Name"}),
#"Invoke Custom Function1" = Table.AddColumn(#"Removed Other Columns", "Transform File from Test", each #"Transform File from Test"([Content])),
#"Filtered Hidden Files1" = Table.SelectRows(#"Invoke Custom Function1", each [Attributes]?[Hidden]? <> true),
#"Removed Other Columns1" = Table.SelectColumns(#"Filtered Hidden Files1", {"Transform File from Test", "Name"}),
#"Expanded Transform File from Test" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File from Test", {"Column1", "Column2", "Column3", "Column4", "Column5", "Item", "Custom"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Item", "Custom"}),
#"Promoted Headers" = Table.PromoteHeaders(#"Expanded Transform File from Test", [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"CustName", type text}, {"Opening", type any}, {"In", type any}, {"Out", type any}, {"Closing", type any}, {"DE", type text}, {"Summary (Units)", type text}, {"Feb-19.xlsx", type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"DE", "Sheet"}, {"Feb-19.xlsx", "File Name"}, {"Summary (Units)", "Summary Type"}}),
#"Filtered Rows" = Table.SelectRows(#"Renamed Columns", each ([CustName] <> "CustName")),
#"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows",{"File Name", "Sheet", "CustName", "Opening", "In", "Out", "Closing", "Summary Type"}),
#"Grouped Rows" = Table.Group(#"Reordered Columns", {"Summary Type"}, {{"AllData", each _, type table}})
in
#"Grouped Rows"

这是我的“从测试转换样本文件”查询的 M 代码,其中进行了更改以适应具有事务信息的顶行:

let
Source = Excel.Workbook(#"Sample File Parameter1", null, true),
#"Removed Other Columns" = Table.SelectColumns(Source,{"Data","Item"}),
#"Added Index" = Table.AddColumn(#"Removed Other Columns", "Indexed", each Table.AddIndexColumn([Data],"Index", 0, 1)),
#"Added Custom1" = Table.AddColumn(#"Added Index", "SummaryIndexed", each Table.AddColumn([Indexed],"Summary Index", each try if Text.StartsWith([Column1],"Summary") then [Index] else null otherwise null)),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "IndexMins", each List.Min([SummaryIndexed][Summary Index])),
#"Added Custom3" = Table.AddColumn(#"Added Custom2", "TopRowsRemoved", each Table.RemoveFirstN([SummaryIndexed],[IndexMins])),
#"Removed Other Columns1" = Table.SelectColumns(#"Added Custom3",{"TopRowsRemoved", "Item"}),
#"Expanded TopRowsRemoved" = Table.ExpandTableColumn(#"Removed Other Columns1", "TopRowsRemoved", {"Column1", "Column2", "Column3", "Column4", "Column5", "Index", "Summary Index"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Index", "Summary Index"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded TopRowsRemoved", each ([Column1] <> null)),
#"Added Custom" = Table.AddColumn(#"Filtered Rows", "Custom", each if Text.StartsWith([Column1],"Summary") then [Column1] else null),
#"Filled Down" = Table.FillDown(#"Added Custom",{"Custom"}),
#"Filtered Rows1" = Table.SelectRows(#"Filled Down", each ([Column1] <> "Summary (Amount)" and [Column1] <> "Summary (Units)"))
in
#"Filtered Rows1"
于 2019-03-28T00:48:25.057 回答