Excel中的Microsoft Query - 使用单元格值定义源

时间:2018-03-27 08:42:09

标签: excel vba excel-vba microsoft-query

我是Microsoft Query的新手,所以我的术语可能不标准。

我正在设置一个Excel文档来操作仪表板。该文档将位于多个用户的共享文件夹中。

我在Excel中创建了一个工作表,其中有一个单元格,用于读取Excel文档的路径。

我计划使用Microsoft Query来使用位于"Sheet1(A1)"的路径来查找此目录中的所有文件并将它们合并。

在运行查询时,我可以将其设置为执行此操作。 但是,在尝试合并此目录中的文件时,我遇到了问题。它可以在我的本地计算机上运行,​​但是当用户使用其凭据尝试使用其他计算机时,用于查找输入的路径将硬编码到我的路径中。

如何将"Sheet1(A1)"值带入查询/转换,以使路径保持动态?

以下是我的工作流程的简要概述:

"来源"对于导入的第一部分读取。在哪里"路径"指的是位于Sheet1(A1)中的命名单元格:

= Folder.Files(Excel.CurrentWorkbook(){[Name="path"]}[Content]{0}[Column1])

我通过仅过滤文件名中的特定术语来稀释源(有多个)。

= Table.SelectRows(Source, each Text.StartsWith([Name], "AS") or Text.StartsWith([Name], "As"))

这是硬编码开始的地方,然后我将过滤文件并展开并合并为一个。

= 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]

正如我所说,查询的来源有效,但我无法通过动态文本,或者至少我不熟悉查询语法来实现它。

1 个答案:

答案 0 :(得分:1)

使用当前版本的Excel,Power Query(在Excel 2016中称为Get and Transform)将比Microsoft Query做得好得多,但从您的代码示例来看,您根本不使用Microsoft Query,但您确实使用Power Query。

您可以在工作表中使用一个单元格,该单元格从打开文件的用户的角度来存储当前文件夹路径。然后,您可以将该路径作为参数提供给Power Query。

公式

=LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-1)

将为您提供当前文件的路径。 (如果它没有确保保存工作簿,而不是新文件)

有几种不同的方法可以将单元格值用作Power Query中的参数。一种选择是在参数表中使用这个公式,正如Ken Puls在他关于parameter tables for Power Query的文章中描述的那样,只是你的情景。