使用'Office 2007兼容包',excel可以与excel 2003进行互操作

本文关键字:excel 2003 互操作 2007 Office 使用 | 更新日期: 2023-09-27 18:10:21

我正在维护一个当前引用Interop.Excel.dll (v 1.5.0.0)的web应用程序。

Interop.Excel.dll被用来访问Excel 2003下的。xls文件,然后,随后访问Excel 2010下的。xlsx/m文件。

web应用程序被移动到另一台机器上(安装了Excel 2003和"Office 2007兼容性包"),现在无法打开。xlsx/m文件(发生的错误堆栈显示如下)。

在那台机器上打开。xlsx/m文件是没有问题的,除了在文件打开时你会看到一小段兼容性包'转换'对话框。

是否有一些已知的限制:Excel 2003;"Office 2007 compp Pack";和。xlsx/m文件?

异常堆栈

2013-04-23 16:03:00.7192|Error|An error occurred in OpenCloseManager. Details Follow: 
Exception Type ---
System.Runtime.InteropServices.COMException
Message ---
The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
HelpLink ---
Source ---
Interop.Excel
StackTrace ---
   at Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)
   at TCG.CRRExDBInterface.BO.SpreadSheetHelper.manageExcelOpen(Boolean blnUpdateLinks) in D:'foo'ExcelDBInterface-4.7.1.0'ExcelDBInterface-4.7.1.0'ExcelDBInterface'CRRExDBInterface'App_Code'BusinessObject'SpreadSheetHelper.cs:line 1920
TargetSite ---
Excel.Workbook Open(System.String, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object, System.Object)|MasterSubPage.parseSecurityInfoFromSpreadsheetAndSave => SpreadSheetHelper..ctor => SpreadSheetHelper.manageExcelOpen

使用'Office 2007兼容包',excel可以与excel 2003进行互操作

勇敢的灵魂是一个把办公室互操作在一个web应用程序。如果你检查文档使用COM API是不建议在服务器上的两个主要原因:

  • 它被设计成在单线程公寓工作([STAThread]在你的Main())和多线程绝对不支持。把一些日志记录周围的API调用失败,并输出线程名和appdomain name -这些将不同的web调用,如果你实例化一个Excel对象在一个线程和使用它在另一个是不会工作的。
  • 它依赖于UI结构,即使应用程序是不可见的- for例如,如果你让Word(我怀疑Excel也是)显示一个弹出窗口当应用程序被隐藏时,结果将像办公室API调用一样是挂。检查服务器的帐户和确保你的web应用使用的是一个没有限制的账户。

无论哪种情况,我都怀疑Excel的版本是你的问题所在。

如果我是你,我会建议"管理"使用OpenXmlSDK升级应用程序。这不是一个简单的切换,但根据你的情况,这是值得的——你可以多线程,不挂隐藏实例等,它更快,你可以很好地控制发生的事情。缺点是学习曲线陡峭,缺乏复制/粘贴类型的功能——必须绕过

为了它的价值(并给这个问题一些解决方案),我放弃了尝试使用旧的机器,并转移到安装了Excel 2010的机器。这根本不是一个真正的答案,但我希望,这是向其他人表明,以我手头的资源是无法解决的。