如果我尝试在客户端计算机上打开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服务。完全相同的安装程序正在其他三台机器上运行。
我可以排除的事情:
我做过的事情:
一些观察:
我在这里缺少什么?
答案 0 :(得分:3)
对不起 - 我知道这是一个间接的答案,虽然我建议你继续。我个人对Excel Interop服务(ASP.NET应用程序)有很糟糕的经验。我知道微软does not recommend Interop server automation。
即使你解决了这个问题,你也可能会遇到内存泄漏,性能等问题。在我以前的项目中,我们使用Excel互操作自动化进行了部署。我们偶然发现了很多问题(Excel Interop进程没有正确关闭等),我们不得不将所有内容重写为OpenXML。
如果可能的话,请使用新的OpenXML格式。有一个ClosedXML library可以让您轻松使用。
为什么OpenXML与Interop?:
效率(OpenXML是轻量级的)
无内存泄漏风险
易于使用
答案 1 :(得分:1)
在尝试此解决方案之前,请务必阅读“我已完成的事情”#34;问题中的段落(并尝试了适合您的内容)
打开文件时抛出异常;在生成Excel的机器上,生成的文件无效。
解决方案是更改数字的格式。
进入系统配置 - >时间,语言和地区 - >语言
点按突出显示的超链接
打开高级设置
将分隔符更改为"。"
答案 2 :(得分:0)
我们已经将客户端/服务器解决方案从4GL语言转换为C#,下面的嵌入式C#代码之前没有任何问题,并且开始接收相同的错误消息。
Excel.Application excelApp = new Excel.Application();
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(fileExcel,
0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
true, false, 0, true, false, false);
我遵循了该线程中的所有指令,但没有用,直到我意识到在我们的例子中至少有fileExcel,它包含带有文件名并定义为System.String fileExcel
的完整路径尾随空格,例如而不是“ C:\ temp \ MyTest.xls”,而是“ C:\ temp \ MyTest.xls [很多空格]”。
将Trim()
添加到fileExcel后,一切都恢复了正常。希望将来对某人有帮助。
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(fileExcel.Trim(),
0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
true, false, 0, true, false, false);