尝试使用Microsoft.Office.Interop.Excel.Workbooks.Open()打开Excel时exceptionHResult 0x800a03ec

如果我尝试在客户机上打开一个excel文件,就会抛出exception:

Exception from HRESULT: 0x800A03EC 

内部例外:(空)

堆栈跟踪:

  at Microsoft.Office.Interop.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 (own assembly) 

这HResult是一个非常通用的错误,我找不到任何有用的信息。

我的设置:

在Windows服务中运行的WCF服务。 完全相同的安装程序正在其他三台机器上工作。

我可以排除的事情:

  • 错误的path
  • 文件不存在
  • 文件已损坏
  • 文件被写保护

我做的事情:

  • 创build桌面文件夹,如下所示(第二个答案) https://social.msdn.microsoft.com/Forums/vstudio/en-US/4d6c383a-94eb-4898-9d22-aa4bb69be25b/
  • 给桌面文件夹“每个人”或“Jeder”权限(德文中的“Jeder”相当于“Everyone”)
  • 用currenlty活动用户启动服务
  • 按照Heidi2的build议更改了DCOM Config for Excel(参见上面的链接)
  • 从Office 365更改为Office Professional Plus
  • 在尝试打开文件时,区域设置设置为en-US
  • 手动打开文件应该打开:没有错误/警告/用户对话框从Excel中
  • 在目标机器上安装英文 – 美国
  • 写了一个非WCF服务,启动执行Interop请求的dll
  • 写了一个控制台应用程序,启动执行Interop请求的dll

一些观察:

  • 如果我删除桌面文件夹(请参阅我的第一个“我已经完成的事情”),我得到的错误描述和解决在这里: Microsoft Office Excel不能访问文件'c:\ inetpub \ wwwroot \ Timesheet \ App_Data \ Template。 XLSX”
  • Excel在任务pipe理器中短时间打开,而DLL试图打开Excel文件
  • 当我安装了Office 365时,Office任务pipe理器启动任务,有时会冻结应用程序。 这就是为什么我切换到Professional Plus
  • 如果活动语言设置为英语美国,则不会抛出此错误; 但是应该由Interop渲染的图像会呈现空白

我在这里错过了什么?

对不起 – 我知道这是一个间接的答案,但我build议你继续。 我个人对Excel Interop服务(ASP.NET应用程序)有非常不好的经验。 据我所知,Microsoft 不推荐Interop服务器自动化 。

即使你解决了这个问题,你也可能会遇到内存泄露,性能等问题。在我之前的项目中,我们使用Excel互操作自动化进行了部署,直到部署。 我们偶然发现了很多问题(Excel Interop进程没有正确closures等),我们不得不将所有东西都重写到OpenXML。

如果可能的话,使用新的OpenXML格式。 有一个ClosedXML库 ,使得工作非常容易。

为什么OpenXML与Interop?:

  1. 效率(OpenXML是轻量级的)

  2. 没有内存泄漏的风险

  3. 使用方便

打开文档时引发exception; 在生成Excels的机器上,文件生成无效。

解决办法是改变数字的格式。

进入系统configuration – >时间,语言和地区 – >语言

进入系统配置 - >时间,语言和地区 - >语言

点击突出显示的超链接

打开高级设置

打开高级设置

将分隔符更改为“。” 将分隔符更改为“。”