Power Query引用同工作簿DataTable不更新,如何无需保存同步刷新?
Power Query汇总视图无法读取未保存刷新数据的解决办法
问题描述
我有一个Power Query,输入特定条件并点击刷新后可从其他工作簿拉取数据,存入名为DataTable的表格,这部分功能正常。但我想在另一标签页用Power Query生成汇总视图,不想重复编写代码,而是基于已运行的DataTable结果生成。问题在于,该汇总查询始终使用工作簿中已保存的数据,而非刚刷新的DataTable数据。
示例代码:
let Source = Excel.Workbook(File.Contents("\\servername\path\thisworkbook.xlsm"), null, true), Data_Table = Source{[Item="DataTable",Kind="Table"]}[Data], ...
尽管目标表格正确,但只有刷新DataTable并保存文件后,汇总查询才会生效。希望无需保存即可一次性刷新所有查询,询问是否有强制更新连接或数据的方法。
解决方案
1. 直接引用当前工作簿的表格对象
不要通过Excel.Workbook(File.Contents(...))读取本地文件的方式获取数据,改用Excel.CurrentWorkbook()直接引用内存中的表格,这样汇总查询会直接读取刚刷新的DataTable数据,无需依赖保存后的文件内容。修改后的代码示例:
let Source = Excel.CurrentWorkbook(){[Name="DataTable"]}[Content], ...
2. 配置查询依赖关系
设置汇总查询依赖于DataTable对应的源查询,确保刷新顺序正确:
- 打开Power Query编辑器,选中汇总查询
- 点击菜单栏的查询 > 属性
- 在弹出窗口中勾选此查询依赖于其他查询,添加
DataTable对应的源查询
这样刷新所有查询时,Excel会先完成DataTable的刷新,再自动执行汇总查询,保证数据是最新的。
3. 用VBA按顺序批量刷新(可选)
如果需要一键完成带顺序的刷新,可以编写简单的VBA宏:
Sub RefreshAllQueries() ' 刷新DataTable对应的查询 ThisWorkbook.Connections("DataTable_Query").OLEDBConnection.Refresh ' 等待刷新完成再执行下一步 Do Until ThisWorkbook.Connections("DataTable_Query").OLEDBConnection.Refreshing = False DoEvents Loop ' 刷新汇总查询 ThisWorkbook.Connections("Summary_Query").OLEDBConnection.Refresh End Sub
将代码中的DataTable_Query和Summary_Query替换为你实际的查询连接名称,运行宏即可按顺序完成刷新,无需保存文件。
内容的提问来源于stack exchange,提问作者user525966
相关产品推荐
相关产品推荐

