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

获取当前工作簿路径-Excel Power Query,excel,powerquery,m,Excel,Powerquery,M,正在尝试添加自定义列并用当前工作簿路径名填充该值 我尝试了Excel.Workbook.name和Excel.CurrentWorkbook()以及其他对象,但这些对象似乎仅限于提取数据 在VBA中,这只是WorkbookObject路径属性。但权力质疑则是另一回事。Microsoft站点上的引用和库仅限于power query 在电源查询中,没有直接的方法可以做到这一点。如果可以将值填入单元格,则可以通过Excel.CurrentWorkbook获取该值。您可以使用VBA并在工作簿打开事件期间

正在尝试添加自定义列并用当前工作簿路径名填充该值

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

在VBA中,这只是WorkbookObject路径属性。但权力质疑则是另一回事。Microsoft站点上的引用和库仅限于power query


在电源查询中,没有直接的方法可以做到这一点。如果可以将值填入单元格,则可以通过Excel.CurrentWorkbook

获取该值。您可以使用VBA并在工作簿打开事件期间打开文件时填充单元格:

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
然后,您可以通过执行以下操作,将该变量从命名范围(“根”)输入Power Query:

let
    Source = Excel.CurrentWorkbook(){[Name="root"]}[Content][Column1]{0}
in
    Source

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

  • 在Excel中定义以下公式,并将此单元格命名为“文件路径”:
  • 在PowerQuery中添加以下函数。这将返回当前目录:
  • 现在,您可以从当前目录导入CSV(或其他)文件:

  • 信用证:

    是的,我也这么认为。不是最优雅的,但经过一些后期处理,我做了以下几点。ListObject.DataBodyRange.Columns(3.Formula=“=”&WorkbookObject.FullName&“
    =LEFT(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1),1)-1)
    
    () =>
    let
        CurrentDir = Excel.CurrentWorkbook(){[Name="FilePath"]}[Content]{0}[Column1]
    in
        CurrentDir 
    
    let
        Source = Csv.Document(File.Contents(currentdir() & "filename.csv"),[Delimiter=";", Columns=15, Encoding=65001, QuoteStyle=QuoteStyle.None])
    in
        Source