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)的主要内容,如果未能解决你的问题,请参考以下文章