Исключение в автоматизации Excel 2007 с Powershell при вызове Workbooks.Add () - PullRequest
5 голосов
/ 27 марта 2009

Следующий код вызывает исключение в Powershell V1 (Excel 2007):

$E = New-Object -COM "Excel.Application"
$E.Visible = $True
$wb = $E.Workbooks.Add() #<<<Exception here

Ошибка говорит о том, что формат может быть старым или что библиотека типов недопустима (перевод с испанского). Подобный скрипт для Word работает просто отлично.

Ответы [ 3 ]

9 голосов
/ 27 марта 2009

В сборках взаимодействия Office, кажется, есть эта проблема, когда текущая культура не в США. Очевидный обходной путь - установить культуру.

Важно запускать все это как одну команду на интерактивной консоли, поскольку PowerShell V1 всегда создает новый поток для каждого вызова команды.

PS C:\Users\jachymko> $e = new-object -com excel.application
PS C:\Users\jachymko> $e.workbooks.add()
Exception calling "Add" with "0" argument(s): "Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
At line:1 char:17
+ $e.workbooks.add <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

PS C:\Users\jachymko> & {
>> [threading.thread]::CurrentThread.CurrentCulture = 'en-US'
>> $e = new-object -com excel.application
>> $e.workbooks.add()
>> $e.visible=1
>> }
>>
4 голосов
/ 28 марта 2009

Адаптировано к Powershell из одного из решений, предложенных в статье Справка и поддержка MS 320369 .

$ci = new-object system.globalization.cultureinfo "en-US"

$e = New-Object -COM "Excel.Application"
$e.Visible = $True
$e.UserControl= $True
$books = $e.Workbooks
$books.PSBase.GetType().InvokeMember( `
       "Add", `
       [system.reflection.bindingflags]::InvokeMethod, `
       $null, $books, $null, $ci)

Из той же статьи:

При использовании одного из этих обходных путей для компьютера с региональными настройками не соответствует текущей языковой версии Office, вы должны быть знакомы с как ведет себя Excel и как Excel будет интерпретировать данные, которые могут быть отформатированы для конкретная локаль.

3 голосов
/ 19 января 2015

У меня была эта проблема при попытке открыть рабочую книгу. Я добавил эту строку:

[threading.thread]::CurrentThread.CurrentCulture = 'en-US'
...