在调用Workbooks.Add()时使用Powershell自动化Excel 2007的异常

时间:2009-03-26 23:05:58

标签: powershell excel-2007

以下代码在Powershell V1(Excel 2007)中引发异常:

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

错误表示格式可能已旧或类型库无效(从西班牙语翻译)。 Word的类似脚本运行得很好。

3 个答案:

答案 0 :(得分:9)

当当前文化不是en-US时,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
>> }
>>

答案 1 :(得分:4)

根据MS Help and Support Article 320369中提出的解决方案之一适应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将如何解释可能格式化的数据   特定的区域设置。

答案 2 :(得分:3)

尝试打开工作簿时出现此问题。我添加了这一行:

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