6

次のコードは、Powershell V1 (Excel 2007) で例外をスローします。

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

このエラーは、形式が古い可能性があるか、タイプ ライブラリが有効でないことを示しています (スペイン語からの翻訳)。Word 用の同様のスクリプトは問題なく動作します。

4

3 に答える 3

10

現在の文化が米国以外の場合、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
>> }
>>
于 2009-03-27T01:04:35.727 に答える
4

MS ヘルプとサポートの記事 320369で提案されているソリューションの 1 つからPowershell に適応。

$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 が解釈する方法に精通している必要があります。

于 2009-03-28T17:05:31.867 に答える