尝试使用Microsoft.Office.Interop.Excel.Workbooks.Open()打开Excel时出现异常HResult 0x800a03ec

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试使用Microsoft.Office.Interop.Excel.Workbooks.Open()打开Excel时出现异常HResult 0x800a03ec相关的知识,希望对你有一定的参考价值。

如果我尝试在客户端计算机上打开excel文件,则抛出以下异常:

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服务。完全相同的安装程序正在其他三台机器上运行。

我可以排除的事情:

  • 错路
  • 文件不存在
  • 文件已损坏
  • 文件被写保护

我做过的事情:

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

一些观察:

  • 如果我删除桌面文件夹(请参阅我的第一个“我已完成的事情”),我会收到错误,如下所述:Microsoft Office Excel cannot access the file 'c:inetpubwwwrootTimesheetApp_DataTemplate.xlsx'
  • 当dll尝试打开excel文件时,Excel在任务管理器中打开很短的时间
  • 当我安装了Office 365时,Office Click-Once Tasks在任务管理器中加速,有时会冻结应用程序。这就是我改用Professional Plus的原因
  • 如果活动语言设置为英语,则不再抛出此错误;但是应该由Interop渲染的图像将呈现为空白

我在这里错过了什么?

答案

对不起 - 我知道这是一个间接的答案,虽然我建议你继续。我个人对Excel Interop服务(ASP.NET应用程序)有很糟糕的经验。我知道微软does not recommend Interop server automation

即使你解决了这个问题,你也可能会遇到内存泄漏,性能等问题。在我以前的项目中,我们使用Excel互操作自动化进行了部署。我们偶然发现了许多问题(Excel Interop进程未正确关闭等),我们不得不将所有内容重写为OpenXML。

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

为什么OpenXML与Interop ?:

  1. 效率(OpenXML轻量级)
  2. 没有内存泄漏风险
  3. 便于使用
另一答案

在尝试此解决方案之前,请确保您已阅读问题中的“我做过的事情”段落(并尝试了适用于您的内容)

在打开文件时抛出了例外;在生成Excel的机器上,生成的文件无效。

解决方案是更改数字的格式。

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

点击突出显示的超链接

打开高级设置

将分隔符更改为“。”

以上是关于尝试使用Microsoft.Office.Interop.Excel.Workbooks.Open()打开Excel时出现异常HResult 0x800a03ec的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试从 pyspark 访问 mysql 表。我正在尝试使用:

尝试使用堆叠小部件构建布局

尝试使用 Curl 登录网站

不安全的 JavaScript 尝试使用框架访问

当我尝试使用 ansible ping 我的 VM 时,它会尝试 ping 服务器 ID 而不是 IP

尝试使用 ConfigurationBuilder 但得到 FileLoadException