【问题标题】:System.Runtime.InteropServices.COMException (0x800A03EC)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权限。

出现以下错误:

System.Runtime.InteropServices.COMException (0x800A03EC):异常 来自 HRESULT:0x800A03EC

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

请帮忙..!

【问题讨论】:

  • "以下代码..." - 什么代码?我想你忘了发布你的代码。

标签: .net iis com excel-interop


【解决方案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 文件中的图像丢失了。通过处理同一文件夹stackoverflow.com/a/41161719/239408INetCache的存在/权限来解决它
【解决方案2】:

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

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

感谢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 进程。

          【讨论】:

            猜你喜欢
            • 2013-03-07
            • 1970-01-01
            • 1970-01-01
            • 2016-06-09
            • 2021-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-17
            相关资源
            最近更新 更多