一、适用场景:
Powerquery查询文件或文件夹只支持绝对路径,不支持相对路径。
有的时候你需要把文件打包发给你的呆瓜领导或者笨瓜同事,文件夹的位置改变后该怎么办?
这时候我们就需要一个自动更新的动态路径,我们采用曲线救国的方法:
二、先来复习Powerquery查询文件夹(合并文件夹),不需要复习的客户请跳到三、:
2.1、我新建了一个文件夹【新建文件夹】,文件夹里有文件夹【数据表格】和查询表格【数据表格汇总.xlsx】
2.2、打开【数据表格汇总.xlsx】→【数据】选项卡→【获取数据】→【来自文件】→【从文件夹】选择【新建文件夹】里的【数据表格】文件夹→【转换数据】。
2.3、打开Powerquery页面的【主页】选项卡→【高级编译器】可以看到M语言代码(一会儿要修改这个代码)。
2.4、打开Powerquery页面的【添加列】选项卡→【自定义】列,“自定义列公式”里输入“= Excel.Workbook([Content], true)”,注意:大小写敏感。
2.5、展开【自定义】列,再展开【Data】列就可以处理合并文件夹里的数据了:
三、关键来了:自动更新的动态路径。
3.1、查询结果表格前插入多行(或者放在别的sheet工作表里也行);
3.1.1、选择两行两列,按住Ctrl+T,创建表中表;
3.1.2、【列1】改成【文件夹名】,下面手动填写存放数据的文件夹名称【数据表格】;
3.1.3、【列2】改成【文件夹路径】,下面填写【=LEFT(CELL("filename"), FIND("[", CELL("filename")) - 1) & A2】;
3.1.4、就这样b2单元格里就有了组合成功的绝对路径。
3.2、引用绝对路径:重新打开Powerquery,【主页】→【高级编译器】
源 = Folder.Files("C:\Users\79994\Desktop\新建文件夹\数据表格"),
第一行代码改成:
源 = Folder.Files(Excel.CurrentWorkbook(){[Name="表2"]}[Content]{0}[文件夹路径]),
解释一下上面的代码:
1、Excel.CurrentWorkbook():函数来引用当前正在使用的 Excel工作簿文件。
2、{[Name="表2"]}:表2是Ctrl+T创建的表中表的名称(注意:不是工作簿workbook的名称,也不是工作表sheet的名称,是表中表table的名称,要根据你的表格名称变化)。
3、[Content]:表示获取“表2”中的数据。
4、{0}:从“表2”的第一行(索引为 0)中提取数据。Power Query 中的索引从 0 开始,因此{0}表示第一行。
5、[文件夹路径]:这是从第一行中提取“文件夹路径”列的值。假设“表2”中有一列名为“文件夹路径”,代码会提取该列的值。
四、完工总结:
4.1、这样无论你把【新建文件夹】放到任何地方,你都不需要改代码,就可以随时刷新。即使【新建文件夹】重命名也不影响。
4.2、不过如果你把【数据表格】文件夹改名成【数据表格2】,那么你得修改这里的值,才能刷新。