因此,我开发了一个Powershell脚本来刷新大约40个大型excel文件并保存,并在此脚本中运行excel宏以传递excel(ODBC)连接参数,然后在刷新完成后从excel文件中删除它们。我唯一的问题是(对于这40个文件中的5个文件)启动RefreshAll命令时,Powershell不会等待Excel完成刷新并传递到下一个命令,该命令是使连接无效的宏,这将导致错误宏中的“1004”(文件仍在刷新时无法访问excel连接。)
经过研究,我知道在Powershell v2中有后台作业的概念,但就我而言,这不是一个备用过程,它属于Excel进程,因此我的Powershell不必等待Excel退出要继续执行,相反,我需要Excel保持打开状态才能继续执行Powershell。
我也知道start-sleep命令不是我的最佳选择,因为没有结束刷新的固定时间值,每个文件都有时间,每个月的每个时间都有时间(数据量)每天增加,直到月底结束)。
所以我的问题是:是否可以对Powershell进行测试,如果Excel文件已完成刷新其数据,如果可以,它将继续,否则将等待更多时间?
最佳答案
弹枪的做法:
Excel已准备就绪,可以进行自动化通信,但可以使用details areunclear。尝试这样的事情:
$Excel = New-Object -ComObject Excel.Application
# Do your stuff here
# Wait for Excel to became ready
while (!$Excel.Ready)
{
Start-Sleep -Seconds 1
}
# Do other stuff
$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open('C:\Path\To\Workbook\Data.xlsx')
# Are any of the QueryTables refreshing?
# Don't have Excel right now, so expression below might need some tweaking
While (($Workbook.Sheets | ForEach-Object {$_.QueryTables | ForEach-Object {if($_.QueryTable.Refreshing){$true}}}))
{
Start-Sleep -Seconds 1
}
$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open('C:\Path\To\Workbook\Data.xlsx')
# Is ODBCConnection refreshing?
# Don't have Excel right now, so expression below might need some tweaking
While ($Workbook.ODBCConnection.Refreshing)
{
Start-Sleep -Seconds 1
}
关于excel - 使PowerShell等待Excel完成刷新数据透视表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28582443/