【问题标题】:How can I fix InteropServices.COMException without installing Excel?如何在不安装 Excel 的情况下修复 InteropServices.COMException?
【发布时间】:2018-10-04 20:12:06
【问题描述】:

我有一个创建 Excel 电子表格的 C# 控制台应用程序。我在应用程序中添加了 Interop.Excel NuGet 包。当我尝试在虚拟机上运行它时,出现异常:

由于以下错误,检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败:80040154 类未注册...

我尝试将平台设为 x64 或 x86 而不是 Any CPU,但没有帮助。 在 VM 上安装 Excel 是不可接受的。有没有不安装的方法解决?

谢谢。

【问题讨论】:

  • 您期望发生什么? COM 用返回码本机通知此类事件,但 CLR 将其转换为异常。这有什么问题?
  • 我认为 NuGet 包将为应用程序提供所有必要的依赖项。

标签: c# excel-interop


【解决方案1】:

抱歉,COM 互操作包不包括应用程序本身,只包含 CLR 可调用函数,以简化与应用程序的互操作。由于 Microsoft Excel 是许可产品,因此您必须单独购买/安装它。

没有免费的午餐,但可能您可以使用 COM 远程处理通过互操作包从 VM 调用在您的主机上运行的 Excel 副本。出于相当明显的安全原因,默认情况下不会启用此功能,但如果您将其用于自动化测试目的,它可能会解决这种用途。

【讨论】:

  • 感谢您的回答。很高兴知道。
【解决方案2】:

如果您只需要与 XLSX 文件交互,您可以尝试不依赖 Excel 的第三方库。 XLSX is an open, XML-based format(它是一堆 XML 的 zip 文件),现在已有 10 多年的历史了。您可以使用许多高质量的开源库来处理它们。

我强烈推荐 EPPlus(GitHubNuGetSO),它非常稳定、功能丰富,并且数量级比使用互操作要快。

如果您需要与旧版 XLS 文件进行交互,那么您就不走运了。这是一种古老的专有格式,MS 非常贴近他们的心。有第三方库可以对其进行操作,但没有一个好的库是免费的(反正就像几年前一样)。

【讨论】:

  • 感谢您的回答。我会试试 EPPlus。
  • 如果您还没有查看过,他们还有 a tutorial in their wiki 可能对您有用(页面右侧的教程页面)
  • 谢谢!我确实检查了它,并对产品感到兴奋。所以我现在将它用于我的项目。是的,他们的文档和示例非常好。
猜你喜欢
  • 2018-11-03
  • 2014-06-06
  • 2021-09-21
  • 1970-01-01
  • 2016-06-07
  • 2020-01-04
  • 1970-01-01
  • 2010-12-15
  • 2017-03-23
相关资源
最近更新 更多