当前位置: 首页 > news >正文

Power Query动态追加查询(对文件夹下文件汇总)

这是Power Query实战工作场景第三期--动态追加查询(对文件夹下文件汇总)

实现即使修改数据文件路径,依然可以动态实时刷新数据
数据资源已经与这篇博客捆绑,通过网盘分享的文件:A学校等2个文件
链接: https://pan.baidu.com/s/1Ro7jjUDznB-7ycuZPcKIlA?pwd=0623 提取码: 0623 

前言:
在Power Query实战工作场景第一期--动态追加查询(同一工作簿下)与Power Query实战工作场景第二期--动态追加查询(不同工作簿下)前两期里,我们学会了一个工作簿里有若干个工作表如何去合并,如果是在一个文件夹下面有若干个文件夹,一个文件夹下面还有若干个文件,文件里还有若干个工作表,我们如何合并呢?比如说在E:\追加查询对文件下这个文件夹下,有A_school、B_school两个文件夹,每个文件夹下面有各个班级的xlsx数据




下面介绍的方法不管追加查询对文件下有几层都没关系,都可以追加查询,若想要理解更加深刻,作者建议阅读在Power Query专栏里Power Query实战工作场景第一期--动态追加查询(同一工作簿下)与Power Query实战工作场景第二期--动态追加查询(不同工作簿下)前两期,核心都是万变不离其宗。

1.如果要合并追加查询对文件下的所有文件夹数据,就在A_school、B_school两个文件夹同一层级下新建一个xlsx文件,改名为合并.xlsx,打开空白的xlsx文件,数据-->获取数据-->来自文件-->从文件夹,打开E:\追加查询对文件下这个文件夹下,弹出对话框,点击转换数据




2.打开源后详细字段讲解
Folder Path是文件的路径,Attributes是每个文件的记录,Date created是文件创建时间
Date modified是文件更新时间,Date accessed是文件更新时间
跟我们有关系的主要是前三项字段
Extension是文件的扩展名,比如我们这里只有xlsx,如果以后你文件夹下面还有pdf,zip,mp4,mp3等文件,肯定不能把它们合并了,所以我们在Extension这里去筛选符合的
Name是文件名,也就是我们在这里筛选哪些文件合并,哪些文件我们不想合并,比如这里我们只合并一班、二班

Content字段下面为什么是Binary?
Power Query实战工作场景第一期--动态追加查询(同一工作簿下)与Power Query实战工作场景第二期--动态追加查询(不同工作簿下)前两期里,我们见到的都是Excel.Workbook(File.Contents("文件路径"),true,true)
这次源里没有这个表达式了,变成了= Folder.Files("E:\追加查询对文件下")
因为Binary就是一个二进制文件,File.Contents("文件路径")就是将文件转换成二进制文件也就是Binary,现在我们已经转成Binary,所以就不需要File.Contents("文件路径")了

3.现在只保留Content列,其它列都删除


4.删完字段后,添加列-->自定义列,输入Excel.Workbook([Content],true,true),删除Content列

5.扩展开表后,只保留Data列,删除其它列,展开Data列

发现展开的"Data"这一应用步骤
= Table.ExpandTableColumn(删除的其他列1, "Data", {"姓名", "语文", "数学"}, {"姓名", "语文", "数学"}),后面两项是写死的(详细见Power Query实战工作场景第一期--动态追加查询(同一工作簿下),这里原理不做过多阐述)

6.在删除的其他列1这一应用步骤,右键插入步骤后,命名为字段名,增加表达式如下:
= List.Distinct(List.Combine(List.Transform(删除的其他列1[Data],each Table.ColumnNames(_))))

7.回到展开的"Data"这一应用步骤,将表达式由
= Table.ExpandTableColumn(字段名, "Data", {"姓名", "语文", "数学"}, {"姓名", "语文", "数学"})
替换为
= Table.ExpandTableColumn(删除的其他列1, "Data", 字段名)
字段名替换可以实时动态识别字段名,切记这里由于增加了步骤,所以展开的"Data"的第一个参数会自动变成字段名,即上一步骤的名称,这里我们依然要改为删除的其他列1这一应用步骤(详细见Power Query实战工作场景第一期--动态追加查询(同一工作簿下),这里原理不做过多阐述)

8.关闭并上载至,选择原有工作表,右键sheet1,新建工作表,命名为路径,原有合并的工作表命名为合并。在A1单元格输入=LEFT(CELL("filename"),FIND("[",CELL("filename"))-2)
自动识别不同文件下

9.公式选项卡-->定义名称,命名为勇太的数分之旅,再次回到Power Query界面


10.将源里的表达式路径修改写活
= Folder.Files("E:\追加查询对文件下")
改为
= Folder.Files(Excel.CurrentWorkbook(){[Name="勇太的数分之旅"]}[Content]{0}[Column1])
关闭并上载,点击保存


11.此时将追加查询对文件下文件移动到桌面上,打开A_school里一班.xlsx,sheet2表里增加一列英语,点击保存,回到合并.xlsx,点击数据选项卡-->刷新


即使我们移动了文件夹,依然可以实现动态刷新数据!实现即使修改数据文件路径,依然可以动态实时刷新数据的需求。

注意点
1.整个外层文件夹可以移动,比如这里案例是追加查询对文件下这个文件夹
2.追加查询对文件下这个文件夹里面的文件名可以修改,比如A_school、B_school
3.整个外层文件夹的名字也可以修改,比如追加查询对文件下名字可以修改

Power Query三期总结:

Power Query实战工作场景第一期--动态追加查询(同一工作簿下)

解决增加字段的问题:
 = List.Distinct(List.Combine(List.Transform(删除的其他列[Data],each Table.ColumnNames(_))))
自动识别路径:
同一文件下:
=left(SUBSTITUTE(CELL("filename"),"[",""),Find("]",SUBSTITUTE(CELL("filename"),"[",""))-1)
复制替换的内容:
Excel.CurrentWorkbook(){[Name="勇太的数分之旅"]}[Content]{0}[Column1]

Power Query实战工作场景第二期--动态追加查询(不同工作簿下)
解决增加字段的问题:
= List.Distinct(List.Combine(List.Transform(删除的其他列1[Data],each Table.ColumnNames(_))))
自动识别路径:不同文件下:
=LEFT(CELL("filename"),FIND("[",CELL("filename"))-1)&"数据.xlsx"
复制替换的内容:
Excel.CurrentWorkbook(){[Name="勇太的数分之旅"]}[Content]{0}[Column1]


Power Query实战工作场景第三期--动态追加查询(对文件夹下文件汇总)
(1)添加自定义列
Excel.Workbook([Content],true)
(2)自定义字段名
= List.Distinct(List.Combine(List.Transform(删除的其他列1[Data],each Table.ColumnNames(_))))
(3)自动识别路径:不同文件下:
=LEFT(CELL("filename"),FIND("[",CELL("filename"))-2)
(4)替换路径
Excel.CurrentWorkbook(){[Name="勇太的数分之旅"]}[Content]{0}[Column1]

相关文章:

  • SSM框架实现学生管理系统的需求分析与设计详解
  • 安科瑞亮相2025 SNEC国际太阳能光伏与智慧能源展
  • Mac电脑通过 IntelliJ IDEA 远程连接 MySQL 的详细教程
  • 一个模板元编程示例
  • 亚马逊Woot秒杀:引爆销量
  • Day 48
  • c++动态规划4——环形动态规划
  • 岛屿周长问题的三种解法:直接计数法、数学计算法与深度优先搜索
  • redis-7.4.4使用
  • 论索引影响性能的一面④ 索引失踪之谜【上】
  • 学习日记-day29-6.13
  • python+django/flask成都奥科厨具厂产品在线销售系统
  • Python学习(9) ----- Python的Flask
  • bytes转string
  • icg真的只能用latch不能用Flip-flop吗
  • 洛谷自己创建的一个小比赛【c++】
  • PCB设计教程【大师篇】stm32开发板PCB整体布局
  • Android13 新增 Stable AIDL接口
  • 传染病传播模拟:基于社会接触网络的疫情预测模型
  • django restframework 在serializer里 通过context设置session
  • 阿里云网站怎么做/app001推广平台官网
  • 做批发网站/优化教程
  • 哪些网站可以做任务赚钱/seo常用工具网站
  • 南京做网站费用/网站营销与推广
  • 深圳比较大的外包公司有哪些/广州网站优化系统
  • 个人网站多少钱/太原seo