Eth*_*han 9 com excel powershell
我已经有很长一段时间没有这个问题而且只是因为懒惰而忽略了它,但我现在需要找到一个解决方案.我有一个脚本可以自动刷新大量的Excel文档.这很好用,但是,如果我将Visible属性设置为false,则存储在网络共享上的工作簿上会失败.
重申一下,使用设置为false的visible属性刷新在LOCAL文件上工作正常,但保存在\ location上的任何工作簿都会失败,并显示错误"调用被被调用者拒绝".所有刷新工作正常,可见属性设置为true.
这是我的代码:
#Create Excel COM object and set it up for use.
$excel = new-object -comobject Excel.Application;
$excel.DisplayAlerts = $false;
#If this is set to false, saving the file on a network share will fail. Reason : Unknown.
$excel.Visible = $true;
#Open workbook which should be refreshed.
$excelworkbook = $excel.workbooks.Open($workbook);
#Refresh WB
$excelworkbook.RefreshAll();
#Save
$excelworkbook.Save();
#Quit Excel
$excel.Quit();
#Destroy COM object. (VERY IMPORTANT!!!!!)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel);
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法:
有任何想法吗?
似乎RefreshAll()不会等待刷新在后台实际成功Visible = $False设置。
RefreshAll()在和之间引入人为延迟Save(),如下所示:
$excelworkbook.RefreshAll();
Start-Sleep -Seconds 30
$excelworkbook.Save();
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过设置工作簿中的所有查询表来强制RefreshAll()同步执行,如类似问题的答案中所建议的:BackgroundQuery = $False
foreach ($Sheet in $excelworkbook.Worksheets) {
foreach ($QTable in $Sheet.QueryTables) {
$QTable.BackgroundQuery = $false
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2031 次 |
| 最近记录: |