excel使用带有'Office 2007兼容包'的Excel 2003进行正常操作?

时间:2013-04-23 04:16:15

标签: c# asp.net excel office-interop

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

Interop.Excel.dll用于在Excel 2003下访问.xls文件,然后在Excel 2010下访问.xlsx / m文件。一切正常。

网络应用程序被移动到另一台计算机(其中安装了带有“Office 2007 Compatability Pack”的Excel 2003),现在无法打开.xlsx / m文件(出现错误的堆栈跟踪,如下所示)。

除了在文件打开时看到小型Compatability Pack“转换”对话框的时候,该机器上的人类打开.xlsx / m文件没有问题。

是否存在一些已知的组合限制:Excel 2003; 'Office 2007 Comp Pack';和.xlsx / m文件?

STACKTRACE

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

2 个答案:

答案 0 :(得分:0)

勇敢的灵魂是将办公室互操作放在网络应用程序中的人。如果您在服务器上检查使用COM API的文档,主要有两个原因:

  • 它设计用于单线程单元(Main()上的[STAThread]),绝对不支持多线程。对失败的API调用进行一些日志记录并输出线程名称和appdomain名称 - 这些因Web调用而异,如果在一个线程上实例化Excel对象并在另一个线程上使用它,则无法正常工作。
  • 它依赖于UI结构,即使应用程序不可见 - 也是如此 例如,如果您导致Word(我也怀疑Excel)显示弹出窗口 当应用程序被隐藏时,结果就像办公室API调用一样 挂了。检查服务器的帐户和 确保您的网络应用使用的是不受限制的帐户 这一点。

在任何一种情况下,我都怀疑Excel的版本是你的问题所在。

如果我是你,我建议“管理”使用OpenXmlSDK升级应用程序。这不是一个简单的开关,但根据你的情况,它可能是值得的 - 你可以多线程,没有悬挂的隐藏实例等,它更快,你可以很好地控制正在发生的事情。缺点是学习曲线陡峭,缺乏复制/粘贴类型的功能 - 必须解决这个问题

答案 1 :(得分:0)

嗯它值得(并且给出这个问题一些解决方案)我放弃了尝试使用旧机器并移动到安装了Excel 2010的机器。根本不是一个答案,但是,我希望,其他人有一些迹象表明它不能解决我不得不提供的资源。