RSS

PS调用excel方法失败,“Old format or invalid type library”

25 Jan

这个错误让人很疼。

原始代码为:

$strPath="c:\test.xls"
$objExcel=New-Object -ComObject Excel.Application
$objExcel.Visible=-1
$WorkBook=$objExcel.Workbooks.Add()
$sheet=$workbook.worksheets.item(1)

当执行到第4行的时候会报错:

Exception calling "Add" with "1" argument(s): "Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
At :line:14 char:33
+ $WorkBook=$objExcel.Workbooks.Add <<<< (0)

错误代码是0x80028018 ,错误提示是Old format or invalid type library

这个问题是系统区域设置并非en-us造成的。可以说是office的老bug了。微软有KB

http://support.microsoft.com/default.aspx?scid=kb;en-us;320369讲解解决办法。但是看完后似乎并不知道他在说什么。

我的系统英文版win08,设置location为中国。安装了中英文的excle,语言选项为英文。

我的解决方案是:将系统语言调为英文美国即可。双中文应该也ok,但是我这里的测试结果是no。

 

root cause:系统语言设置与excel的语言设置不同冲突。这会导致打开或保存一个文件的时候使用了不同的方法并最终导致错误发生。比如时间格式。

网上有大仙们用在其代码中有专门将locate指定为1033的一行,由此解决该问题。不过我比较弱,没有太明白就不写错误的介绍了。

Advertisements
 
Leave a comment

Posted by on January 25, 2009 in Powershell

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: