Power Query的M脚本如何设置相对路径引用源文件避免移动后失效
解决方案:Power Query 相对路径引用改造
步骤1:新建辅助查询获取当前根目录
该辅助查询会自动读取当前工作簿所在的文件夹路径,作为相对路径拼接的基准:
- 打开查询所在的Excel工作簿,在任意空白单元格输入公式:
=CELL("filename"),按回车后会返回当前文件的完整路径 - 选中这个单元格,在公式栏左侧的名称框输入
CurrentFileFullPath,按回车完成命名 - 新建空白Power Query查询,命名为
GetRootDir,输入以下M代码:
let // 读取单元格存储的当前文件完整路径 Source = Excel.CurrentWorkbook(){[Name="CurrentFileFullPath"]}[Content]{0}[Column1], // 提取当前文件所在的文件夹路径(去掉文件名部分) RootPath = Text.BeforeDelimiter(Source, "[", 0) in RootPath
步骤2:修改原有查询的路径引用
将原有脚本中的绝对路径替换为「根目录+相对路径」的拼接格式,改造后代码如下:
let // 拼接相对位置的目标文件地址 Source = Excel.Workbook(File.Contents(GetRootDir() & "Source\Tallys.xlsx"), null, true), #"Tally_Sheet" = Source{[Item="Tally",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"Tally_Sheet", [PromoteAllScalars=true]), #"Filter rows to FROM and TO dates" = Table.SelectRows(#"Promoted Headers", each [Date] >= from_date and [Date] <= to_date) in #"Filter rows to FROM and TO dates"
注意事项
- 移动整套年度文件夹后,打开工作簿时启用内容、刷新查询即可自动适配新路径
- 工作簿必须先保存后
CELL函数才能正常返回路径,未保存的文件会触发路径读取错误 - 若查询所在工作簿本身存放在子目录,只需调整拼接的相对路径字符串即可适配
内容的提问来源于stack exchange,提问作者BillyJo_rambler
相关产品推荐
相关产品推荐

