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

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]

http://www.xdnf.cn/news/13930.html

相关文章:

  • WebSocket 前端断连原因与检测方法
  • Bean对象不同的方式注入,是不同的annotation接口描述
  • Java单元测试
  • 【走进Golang】测试SDK环境搭建成功,配置path环境变量
  • 深入剖析AI大模型:Prompt 开发工具与Python API 调用与技术融合
  • idea中导入maven项目的方法
  • AWS S3:云存储的“超级基石”
  • Coze扣子 - AI生成数字人口播视频
  • freeswitch使用hiredis的limit功能
  • <8>-MySQL复合查询
  • java发送excel附件的邮件
  • 计算机视觉与深度学习 | 2024年至2025年图像匹配算法总结(原理,公式,代码,开源链接)
  • 【白雪讲堂】当前GEO是否能追溯数据源?
  • 6.13 note | 二分查找
  • 基于大模型预测单纯性孔源性视网膜脱离的技术方案
  • 轻量级密码算法PRESENT的C语言实现(无第三方库)
  • 基于RK3588,飞凌教育品牌推出嵌入式人工智能实验箱EDU-AIoT ELF 2
  • C语言多进程TCP服务器与客户端
  • 【论文阅读笔记】CVPR2025 | 2D高斯溅射的几何-光照解耦:Ref-GS实现开放世界级真实渲染
  • Java 实现 Excel 转化为 PDF
  • OceanBase (DBA)一面面经
  • DMC-E 系列总线控制卡----雷赛板卡介绍(六)
  • 使用 ollama 在 mac 本地部署一个 qwen3:8b 模型
  • 26考研 | 王道 | 计算机组成原理 | 六、总线
  • 传统企业数字化转型:以定制开发开源 AI 智能名片 S2B2C 商城小程序源码为核心的销售环节突破
  • Python爬虫实战:研究gearman相关技术
  • 计算机视觉与深度学习 | 低照度图像增强算法综述(开源链接,原理,公式,代码)
  • Spring Boot常用依赖大全:从入门到精通
  • Ecc option开启后报错解决(植入实际程序后)
  • 【递归、搜索与回溯】FloodFill算法(二)