在读取 excel 文件时检索具有 CLSID 的组件的 COM class 工厂

Retrieving the COM class factory for component with CLSID on excel file reading

我有一个 asp.net 项目读取 excel 文件并使用 Microsoft excel 16 对象库 Microsoft office 16 对象库 ..在开发机器上一切都很好,我可以读取数据......但是在我发布网站并将其上传到 somee.com 之后免费托管...我上传 excel 的部分运行良好,但在读取数据部分我遇到了这个错误

System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

我搜索了原因,我认为问题是关于 excel 主机可能不支持的库或类似的东西......如果你能帮我弄清楚,谢谢你。

您违反了办公自动化的基本规则 -- 不要在服务器上这样做。期间.

可以在服务器上安装 Office,甚至可以手动注册一些东西以使其在测试时足以让您的 Web 应用程序运行一次或两次。但是一旦该应用程序被转移到生产环境中,它就会开始失败——持续或间歇性地——甚至可能导致您的 Web 应用程序完全挂起。 Office 是一组应用程序,而不是一组数据操作库。关于它的一切都被设计得好像用户是 运行 它来自交互式会话 - 它为很多操作创建 windows,并且它本质上是 multi-process。您的服务器是 运行 在 non-interactive 会话中,在这种情况下 window 管理的规则是不同的。确实没有办法使服务器应用程序中的 Office 自动化安全,尤其是托管多个 applications/sites and/or 的服务器是 high-traffic.

执行此操作的 "correct" 方法是使用将 Office 文档纯粹视为数据结构的库。执行此操作的库可以在不调用 Office 的情况下读取和操作文档中的数据。一个类比是 XML 文档——你使用像 .NET 的 XmlDocumentXDocument 这样的 XML API 从文件中读取数据,在内存中操作它,然后将其存储回磁盘。这与尝试自动化用户将使用某些可视化 XML 编辑器应用程序执行的操作有很大不同。

我建议您查看 Open XML SDK,Microsft 专门为此目的提供的一个库。所有 Office 2007+ 文档都以名为 Open XML 的开放格式存储。该库是围绕该文件格式的规范进行编码的。