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

Flo*_*ser 5 excel wcf interop windows-services

如果我尝试在客户端计算机上打开 Excel 文件,则会引发以下异常:

Exception from HRESULT: 0x800A03EC
Run Code Online (Sandbox Code Playgroud)

内部异常:(空)

堆栈跟踪:

   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)
Run Code Online (Sandbox Code Playgroud)

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

我的设置:

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

我可以排除的事情:

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

我做过的事情:

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

一些观察:

  • 如果我删除桌面文件夹(请参阅我的第一个“我已经完成的事情”),我会收到如下所述并解决的错误:Microsoft Office Excel 无法访问文件 'c:\inetpub\wwwroot\Timesheet\App_Data\Template. xlsx'
  • Excel 在任务管理器中打开一小段时间,而 dll 尝试打开 excel 文件
  • 当我安装了 Office 365 时,Office Click-Once Tasks 在任务管理器中出现,有时会冻结应用程序。这就是我切换到 Professional Plus 的原因
  • 如果活动语言设置为美国英语,则不再抛出此错误;但是应该由 Interop 渲染的图像被渲染为空白

我在这里缺少什么?

Flo*_*ser 2

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

打开文档时抛出异常;在生成 Excel 的计算机上,生成的文件无效。

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

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

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

点击突出显示的超链接

打开高级设置

打开高级设置

将分隔符更改为点“.” 将分隔符更改为点“.”