0

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

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

该网络应用程序被移动到另一台机器上(安装了“Office 2007 兼容性包”的 Excel 2003),现在无法打开 .xlsx/m 文件(出现如下所示的错误堆栈跟踪)。

除了在打开文件时看到一小段兼容性包“转换”对话框之外,人工打开该机器上的 .xlsx/m 文件没有问题。

是否有一些已知的组合限制:Excel 2003;'Office 2007 压缩包'; 和 .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
4

2 回答 2

0

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

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

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

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

于 2013-04-23T04:28:58.030 回答
0

好吧,这是值得的(并为这个问题提供了一些解决方案)我放弃了尝试使用旧机器并转移到安装了 Excel 2010 的机器上。根本不是一个真正的答案,但我希望,向其他人一些迹象表明,我必须提供的资源无法解决。

于 2013-05-02T01:57:29.943 回答