Available categories: [/] [working on downwap.] [trouble shooting] [working on Yup Mailman]
Office版本差异导致的.net调用Excel的问题 [Permalink] Tue Mar 01 11:33:32 CST 2005 为了处理excel文件的数据导入,我使用了Excel.Application这个对象。在我的OfficeXp环境下,打开workbook的做法是这样的: oWB=oXL.Workbooks.Open(XlsFile.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);可是到了客户的Office2000环境下,竟然出了这个不知所云的错误:
****** [ERROR] ****** 每个实例都货真价实,怎么会有空指针错误呢?经过n小时调试(装VMware和win2kp/office2k用n-1小时 ),多方查找资料才知道原来是因为两个版本的COM对象的Open方法参数列表不一样!新版另外提供了一个_Open的方法,参数列表和旧版Open一样,以保证兼容性。所以代码变成这样: oWB=oXL.Workbooks._Open(XlsFile.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);就太平了。另外SaveAs时候office2003和officexp/2000也不一样。同理提供了_SaveAs。 用OleViewer查了COM接口,新的Open加入了 [in, optional] VARIANT Local, [in, optional] VARIANT CorruptLoad,这样两个参数。应该是新版office提供的功能。不过长此以往,不得______Open了么?反正现在Wookbooks接口的OpenText已经到了__OpenText。。COM不熟,不知道这是不是规范使然。 问题解决了,不过确是挺郁闷。为什么要NullRefException而不是InvalidOperationException呢?但愿是因为.net和COMinterop的关系,所以产生一个正确的异常起来不像想象的那么容易。否则就真的是RPWT了。
Posted by: miles |
? |
Available categories: [/] [working on downwap.] [trouble shooting] [working on Yup Mailman]
html hits:?51340