如何在不安装 Excel 的情况下修复 InteropServices.COMException?

How can I fix InteropServices.COMException without installing Excel?

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

为 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件检索 COM class 工厂失败,原因如下:80040154 Class 未注册...

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

谢谢。

抱歉,COM 互操作程序包不包括应用程序本身,仅包括简化与应用程序互操作的 CLR 可调用函数。由于 Microsoft Excel 是许可产品,您必须单独 purchase/install 它。

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

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

我强烈推荐 EPPlus (GitHub, NuGet, SO),它非常稳定,功能丰富,并且比使用互操作快 幅度

如果您需要与遗留的 XLS 文件进行交互,那您就倒霉了。这是一种古老的专有格式,MS 一直非常重视。有第三方库可以对它们进行操作,但是 none 好的库是免费的(反正几年前也是如此)。