System.Runtime.InteropServices.COMException (0x800A03EC)

Posted

技术标签:

【中文标题】System.Runtime.InteropServices.COMException (0x800A03EC)【英文标题】: 【发布时间】:2011-05-23 10:35:21 【问题描述】:

Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs() 方法在 Windows server 2003 和 XP 上运行良好,但在 Windows server 2008 上运行良好。我复制了它,因为它提供了所有 Dll 和权限

我也尝试了网上给出的所有解决方案,例如文化设置和DCOM权限。

出现以下错误:

:异常 来自 HRESULT:0x800A03EC

Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(对象文件名, 对象 FileFormat、对象密码、对象 WriteResPassword、对象 ReadOnlyRecommended、对象 CreateBackup、XlSaveAsAccessMode AccessMode, 对象 ConflictResolution, 对象 AddToMru, 对象 TextCodepage, Object TextVisualLayout, Object Local)

请帮忙..!

【问题讨论】:

"以下代码..." - 什么代码?我想你忘了发布你的代码。 【参考方案1】:

找到答案.......!!!!!!!!!

Microsoft 在 Windows server 2008 上正式不支持 Microsoft Office 2003 Interop。

但是在对代码和搜索进行大量排列和组合之后,我们发现了一种适用于我们场景的解决方案。

解决方案是弥补 Windows 2003 和 2008 维护其文件夹结构的方式之间的差异,因为 Office Interop 依赖于桌面文件夹在中间打开/保存文件。 2003系统的桌面文件夹在systemprofile下,2008没有。

因此,当我们在 2008 年在相应的层次结构下创建此文件夹时,如下所示; office Interop 能够根据需要保存文件。需要在

下创建此 Desktop 文件夹

C:\Windows\System32\config\systemprofile

C:\Windows\SysWOW64\config\systemprofile

这对我有用...

还要检查是否安装了 .NET 1.1,因为 Interop 需要它,而 Windows Server 2008 没有预装它

或者您也可以使用 SaveCopyas() 方法,只需将参数作为文件名字符串)

谢谢各位..!

【讨论】:

我刚刚使用了 SaveCopyas() 而不是 SaveAs() 并在 web.config 中添加了模拟及其工作! 当方法具有不同的参数(例如保存格式)时,您如何使用 SaveCopyAs() 而不是 SaveAs() ? 我已经创建了桌面文件夹,它再次完美运行。谢谢这么匹配,我自己从来没有发现过这个问题 还要确保在创建的桌面文件夹上设置适当的写入/创建权限。 工作(几乎)就像一个魅力:我的 Excel 文件中的图像丢失了。通过处理同一文件夹***.com/a/41161719/239408中INetCache的存在/权限来解决它【参考方案2】:

试试这个,因为它对我有用...

    转到“开始”->“运行”并输入“dcomcnfg” 这将打开组件服务窗口,展开“控制台根目录”->“计算机”->“DCOM 配置” 在组件列表中找到“Microsoft Excel 应用程序”。 右键单击条目并选择“属性” 转到属性对话框上的“身份”选项卡。 选择“交互式用户”。

感谢Last paragraph mentioned in here

【讨论】:

10q 我的朋友,我什么都试过了,除了你的回答,我的情况没有任何效果。【参考方案3】:

一些谷歌搜索显示您可能有一个损坏的文件:

http://bitterolives.blogspot.com/2009/03/excel-interop-comexception-hresult.html

并且您可以告诉 excel 使用 CorruptLoad 参数打开它,例如...

Workbook workbook = excelApplicationObject.Workbooks.Open(path, CorruptLoad: true);

【讨论】:

我遇到了同样的问题。这是excel文件中的垃圾数据。在 excel 中手动打开它并删除所有有效的坏数据。我也尝试过使用 CorruptLoad。这有效【参考方案4】:

我在尝试保存 Excel 文件时看到了同样的错误。当我使用 MS Office 2003 时,代码运行良好,但升级到 MS Office 2007 后,我开始看到这一点。每当我尝试将 Excel 文件保存到服务器或远程文件共享时,都会发生这种情况。

我的解决方案虽然很简陋,但效果很好。我只是让程序将文件保存在本地,就像用户的 C:\ 驱动器一样。然后使用“System.IO.File.Copy(File, Destination, Overwrite)”方法将文件移动到服务器。然后你可以删除C:\驱动器上的文件。

效果很好,也很简单。但不可否认,这不是最优雅的方法。

希望这会有所帮助!在这个想法突然出现之前,我在网上找到任何解决方案时遇到了很多麻烦。

【讨论】:

【参考方案5】:

这是 IIS 运行时的权限问题 我遇到了这个问题,我用这种方式解决了它

我继续文件夹

C:\Windows\System32\config\SystemProfile

C:\Windows\SysWOW64\config\SystemProfile

是受保护的系统文件夹,它们通常有锁。

右键->卡安全->点击编辑->添加untente“Autenticadet用户”并分配权限。

此时一切都解决了,如果您仍然有问题尝试将所有权限授予“所有人”

【讨论】:

【参考方案6】:

对于所有仍然遇到这个问题的人,我只花了 2 天时间来追踪这该死的东西。 当数据集中没有行时,我遇到了同样的错误。 似乎很明显,但错误消息非常模糊,因此需要 2 天。

【讨论】:

@daniele3004 如果我没记错的话,问题是我的行数为零。所以我添加了对numberOfRows > 0 的检查,问题得到了解决。【参考方案7】:

在我的情况下,问题是将标题样式设置为“标题 1”,但该样式在 Word 中不存在,我收到错误,因为它不是英语语言的 Office。

【讨论】:

【参考方案8】:

由于 excel 文件的路径,我遇到了这个问题,每当我尝试打开 excel 文件时,我都会收到错误消息(即我的 excel 文件的路径很长,例如 C:\Users\Blabla\Blabla\MyVeryLongFolderHierarchyPath\ MyExcelFile.xlsx)

解决方案是将我的 excel 文件直接放在较短的文件路径下(如 C:\MyExcelFile.xlsx)。我不敢相信由于 2021 年的长文件路径会出现如此愚蠢的问题

【讨论】:

【参考方案9】:

我偶然发现的一个奇怪的解决方案是查看是否有任何 Excel 进程在后台运行。确保代码实际上在自行清理并关闭所有 Excel 进程。

【讨论】:

以上是关于System.Runtime.InteropServices.COMException (0x800A03EC)的主要内容,如果未能解决你的问题,请参考以下文章