如何修改PowerShell脚本实现Excel Power Query(MS SQL源)串行刷新?
修改PowerShell脚本实现Power Query串行刷新的核心调整点
1. 移除批量刷新与固定等待逻辑
删掉原脚本中调用$workbook.RefreshAll()和固定时长Start-Sleep的代码块——这部分是导致无差别等待的根源。
2. 新增按指定顺序逐个刷新Power Query连接的逻辑
替换为遍历目标Power Query连接、逐个触发刷新并等待完成的代码,核心步骤如下:
- 定义需要刷新的连接名称列表(必须保证DATA3在DATA5之前,因为DATA5复制自DATA3的数据源)
- 循环遍历每个连接,触发刷新后通过轮询连接的
Refreshing属性,等待当前连接刷新完成后再进入下一个循环
示例修改后的代码片段
假设原脚本中打开工作簿后的代码是:
$workbook.RefreshAll() Start-Sleep -Seconds 420 # 固定等待7分钟
替换为:
# 按依赖顺序定义Power Query连接名称 $targetConnections = @("DATA1", "DATA2", "DATA3", "DATA4", "DATA5") foreach ($connName in $targetConnections) { # 获取目标连接对象 $conn = $workbook.Connections.Item($connName) # 触发当前连接刷新 $conn.Refresh() # 轮询等待刷新完成,避免固定时长等待 while ($conn.Refreshing) { Start-Sleep -Seconds 5 # 每5秒检查一次刷新状态,可按需调整间隔 } Write-Host "Power Query连接 [$connName] 刷新完成" }
关键注意事项
- 连接名称必须与Excel中Power Query的实际连接名称完全匹配(区分大小写)
- 若DATA5的数据源依赖DATA3的刷新结果,务必保证列表中DATA3的顺序在DATA5之前
- 轮询间隔(示例中5秒)可根据SQL存储过程的执行时长灵活调整,平衡检查频率与资源消耗
- 可添加异常处理(如
try-catch),避免因连接不存在或刷新失败导致脚本中断
内容的提问来源于stack exchange,提问作者Minyun
相关产品推荐
相关产品推荐

