2017-01-15 7 views
0

Я пишу сценарий PowerShell, который принимает значения из таблиц в файле DOCX, но я столкнулся с небольшой проблемой. Я не могу «молча продолжить» выполнение скрипта, если файл DOCX не содержит никаких таблиц или если таблица слишком мала, чтобы иметь ячейку с «1,9» координатами.-ErrorAction странное поведение при установке переменной из объекта COM

Вот код, у меня есть банкомат, но он не действует так, как я ожидал (ошибки по-прежнему отображается):

$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

Какие ошибки? '-ErrorAction SilentlyContinue' не обязательно подавляет все ошибки (например, ошибки параметров). –

+0

@AnsgarWiechers Что-то похожее на «Вызов исключения» Cell «с аргументом« 2 »:« запрашиваемый член коллекции не существует »' –

ответ

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/поймать блока:

$valueInCell = try{ 
    $document.Tables.Item(1).Cell(1,9).Range.Text 
} 
catch{ 
    "" 
} 
Смежные вопросы