从COM对象设置变量时出现-ErrorAction奇怪的行为

时间:2017-01-15 18:42:35

标签: vba powershell ms-word

我正在编写一个PowerShell脚本,它从DOCX文件中的表中获取值,但我遇到了一些问题。如果DOCX文件不包含任何表格,或者表格太小而无法使用具有“1,9”坐标的单元格,我无法“静默地继续”执行脚本。

这是我有ATM的代码,但它没有按照我的预期行事(错误仍然显示):

$word = New-Object -ComObject Word.Application
$word.Visible = $false
$document = $word.Documents.Open("C:\document.docx")
Set-Variable -Name "valueInCell" -Value $document.Tables.Item(1).Cell(1,9).Range.Text -ErrorAction SilentlyContinue
$document.Close()
$word.Quit()

有关如何在发生错误时静默继续的任何想法?

1 个答案:

答案 0 :(得分:1)

-ErrorAction参数控制有问题的命令引发的错误的处理 - 而不是在执行命令之前发生的错误。

在调用Set-Variable之前,PowerShell需要评估值表达式$document.Tables.Item(1).Cell(1,9).Range.Text,这肯定会引发InvokeMethodOnNull错误。

更改当前范围中的默认错误操作首选项:

$ErrorActionPreference = 'SilentlyContinue'
Set-Variable varname -Value $null.GetType() # no error output

或将其包装在try / catch块中:

$valueInCell = try{
    $document.Tables.Item(1).Cell(1,9).Range.Text
} 
catch{
    ""
}