获取当前工作簿路径 - Excel Power Query

4

试图添加自定义列并将值填充为当前工作簿路径名称。

我尝试了Excel.Workbook.name和Excel.CurrentWorkbook()以及其他对象,但似乎它们仅限于提取数据。

在VBA中,这仅是WorkbookObject Path属性。但在Power Query中,情况又不同了。Microsoft网站上的参考资料和库对Power Query来说是有限的。

https://msdn.microsoft.com/en-us/library/mt779182.aspx

3个回答

10

不使用VBA,您可以使用以下仅涉及使用Excel公式的方法:

  1. 在Excel中定义以下公式,并将此单元格命名为“FilePath”:
=LEFT(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1),1)-1)
  1. 在PowerQuery中添加以下功能。 这将返回当前目录:
() =>
let
    CurrentDir = Excel.CurrentWorkbook(){[Name="FilePath"]}[Content]{0}[Column1]
in
    CurrentDir 
  1. 现在您可以从当前目录导入您的CSV(或其他)文件:
let
    Source = Csv.Document(File.Contents(currentdir() & "filename.csv"),[Delimiter=";", Columns=15, Encoding=65001, QuoteStyle=QuoteStyle.None])
in
    Source

参考文献: https://techcommunity.microsoft.com/t5/excel/power-query-source-from-relative-paths/m-p/206150


3

在 Power Query 中没有直接的方法来实现这个功能。如果您可以将该值填入单元格中,则可以通过 Excel.CurrentWorkbook 获取该值。


是的,我也想到了。虽然不太优雅,但是通过一些后处理,我会执行以下操作。ListObject.DataBodyRange.Columns(3).Formula = "=""" & WorkbookObject.FullName & """" - dfresh22

1

您可以使用VBA,在Workbook_Open事件期间打开文件时填充单元格:

Private Sub Workbook_Open()
Dim root As String

root = ActiveWorkbook.path

Range("root").Value = root
'root is the named range used in power query.
End Sub

您可以通过以下方式将命名范围(“root”)中的变量传递到 Power Query 中:
let
    Source = Excel.CurrentWorkbook(){[Name="root"]}[Content][Column1]{0}
in
    Source

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接