Excel 中的 Microsoft Query - 使用单元格值定义源
Microsoft Query in Excel - Using a cell value to define a source
我是 Microsoft Query 的新手,所以我的术语可能不标准。
我正在设置一个 Excel 文档作为仪表板。该文档将位于多个用户的共享文件夹中。
我在 Excel 中创建了一个 sheet,其中有一个单元格读取 Excel 文档的路径。
我打算使用 Microsoft Query 来使用位于假设 "Sheet1(A1)"
中的路径来查找此目录中的所有文件并将它们合并。
在 运行 查询中,我可以对其进行设置以使其执行此操作。
然而,我在尝试合并该目录中的文件时遇到了问题。它在我的本地机器上运行,但是当用户尝试在另一台机器上使用他们的凭据时,用于查找输入的路径被硬编码到我的路径。
如何将 "Sheet1(A1)"
值携带到查询/转换中,以允许路径保持动态?
以下是我的工作流程的简要概述:
导入第一部分的 "Source" 读取。其中 "path" 指的是位于 Sheet1(A1) 中的命名单元格:
= Folder.Files(Excel.CurrentWorkbook(){[Name="path"]}[Content]{0}[Column1])
我通过仅过滤文件名中的特定术语(有多个)来精简源代码。
= Table.SelectRows(Source, each Text.StartsWith([Name], "AS") or Text.StartsWith([Name], "As"))
这是硬编码开始的地方,然后我将过滤后的文件展开并将 sheet 合并为一个。
= Table.AddColumn(#"Filtered Rows", "Transform File from Query1 (2)", each #"Transform File from Query1 (2)"([Content]))
这是路径硬编码的地方,我想使用单元格 A1 中的值。
= #"Filtered Rows"{[#"Folder Path"="**C:\Users\User\Path\**",Name="As_Test.xlsx"]}[Content]
正如我所说,查询源有效,但我无法执行该动态文本,或者至少我不精通执行它的查询语法。
对于 Excel 的当前版本,Power Query(在 Excel 2016 年称为 Get 和 Transform)将比 Microsoft Query 做得更好,但从您的代码示例来看,您不是完全使用 Microsoft Query,但您确实在使用 Power Query。
您可以在工作表中使用一个单元格,从打开文件的用户的角度来存储当前文件夹路径。然后,您可以将该路径作为参数提供给 Power Query。
公式
=LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-1)
将为您提供当前文件的路径。 (如果不能确保工作簿已保存,而不是新文件)
在 Power Query 中使用单元格值作为参数有几种不同的方法。一种选择是将此公式放在参数 table 中,如 Ken Puls 在他关于 parameter tables for Power Query 的文章中所述,只是您的场景。
我是 Microsoft Query 的新手,所以我的术语可能不标准。
我正在设置一个 Excel 文档作为仪表板。该文档将位于多个用户的共享文件夹中。
我在 Excel 中创建了一个 sheet,其中有一个单元格读取 Excel 文档的路径。
我打算使用 Microsoft Query 来使用位于假设 "Sheet1(A1)"
中的路径来查找此目录中的所有文件并将它们合并。
在 运行 查询中,我可以对其进行设置以使其执行此操作。 然而,我在尝试合并该目录中的文件时遇到了问题。它在我的本地机器上运行,但是当用户尝试在另一台机器上使用他们的凭据时,用于查找输入的路径被硬编码到我的路径。
如何将 "Sheet1(A1)"
值携带到查询/转换中,以允许路径保持动态?
以下是我的工作流程的简要概述:
导入第一部分的 "Source" 读取。其中 "path" 指的是位于 Sheet1(A1) 中的命名单元格:
= Folder.Files(Excel.CurrentWorkbook(){[Name="path"]}[Content]{0}[Column1])
我通过仅过滤文件名中的特定术语(有多个)来精简源代码。
= Table.SelectRows(Source, each Text.StartsWith([Name], "AS") or Text.StartsWith([Name], "As"))
这是硬编码开始的地方,然后我将过滤后的文件展开并将 sheet 合并为一个。
= Table.AddColumn(#"Filtered Rows", "Transform File from Query1 (2)", each #"Transform File from Query1 (2)"([Content]))
这是路径硬编码的地方,我想使用单元格 A1 中的值。
= #"Filtered Rows"{[#"Folder Path"="**C:\Users\User\Path\**",Name="As_Test.xlsx"]}[Content]
正如我所说,查询源有效,但我无法执行该动态文本,或者至少我不精通执行它的查询语法。
对于 Excel 的当前版本,Power Query(在 Excel 2016 年称为 Get 和 Transform)将比 Microsoft Query 做得更好,但从您的代码示例来看,您不是完全使用 Microsoft Query,但您确实在使用 Power Query。
您可以在工作表中使用一个单元格,从打开文件的用户的角度来存储当前文件夹路径。然后,您可以将该路径作为参数提供给 Power Query。
公式
=LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-1)
将为您提供当前文件的路径。 (如果不能确保工作簿已保存,而不是新文件)
在 Power Query 中使用单元格值作为参数有几种不同的方法。一种选择是将此公式放在参数 table 中,如 Ken Puls 在他关于 parameter tables for Power Query 的文章中所述,只是您的场景。