如何通过Power Automate定时静默刷新SharePoint中带Power Query的Excel文件?
我在SharePoint库中存储了多个Excel工作簿(每个客户端对应一个,包含客户数据),每个工作簿都配置了从MSSQL提取数据的参数化Power Query。我写了一段Office Script,在工作簿打开时能成功刷新所有数据连接:
function main(workbook: ExcelScript.Workbook) { // Refresh all data connections workbook.refreshAllDataConnections(); }
之后创建了Power Automate流,流能成功执行(可访问目标工作簿和Office Script),但工作簿没有更新新提取的数据——只有打开工作簿时刷新才生效,可没办法一直保持工作簿打开。想通过Power Automate按计划,用Office Script实现Excel工作簿的静默刷新,请问这可行吗?
注:PowerBI不可用,给每个工作簿设置绝对引用的VBA、Python或PowerShell组合方案效率太低。
可行,但需要调整Office Script的写法和Power Query的设置,具体步骤如下:
- 修改Office Script适配Power Query刷新
workbook.refreshAllDataConnections()仅针对传统数据连接生效,无法刷新Power Query(Get & Transform)查询。需要遍历并刷新所有Power Query查询,替换为以下脚本:
function main(workbook: ExcelScript.Workbook) { // 获取所有Power Query查询 const queries = workbook.getQueries(); // 逐个刷新查询 queries.forEach(query => { query.refresh(); }); // 刷新后保存工作簿,确保变更写入SharePoint workbook.save(); }
- 调整Power Query的加载属性
确保每个Power Query允许后台刷新,避免仅在打开文件时触发:
- 打开对应Excel工作簿,进入「数据」选项卡,点击「查询和连接」
- 右键目标查询,选择「属性」
- 在「使用状况」标签下,勾选「允许后台刷新」,取消「仅当打开文件时刷新数据」选项
- 优化Power Automate流配置
- 执行Office Script动作后,添加「等待」动作(建议等待30-60秒,根据数据量调整),确保刷新和保存操作完全完成
- 确认流使用的账号对SharePoint库拥有编辑权限,同时对MSSQL数据库具备读取权限
额外注意点:
- 这种静默刷新无需保持工作簿打开,Power Automate调用Office Script时会在云端实例化工作簿完成操作
- 如果查询包含参数,需确保参数在云端环境中能正确解析(比如参数来自工作簿单元格,需确认单元格值无误)
内容的提问来源于stack exchange,提问作者Minyun
相关产品推荐
相关产品推荐

