【问题标题】:Retrieving the COM class factory for component with CLSID on excel file reading在读取 Excel 文件时检索具有 CLSID 的组件的 COM 类工厂
【发布时间】:2018-07-29 11:56:52
【问题描述】:

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

System.Runtime.InteropServices.COMException:检索 COM 类 具有 CLSID 的组件的工厂 {00024500-0000-0000-C000-000000000046} 由于以下原因而失败 错误:80040154 类未注册(HRESULT 异常: 0x80040154 (REGDB_E_CLASSNOTREG))。

我搜索了原因,我认为问题在于主机可能不支持的 excel 库或类似的东西......谢谢你帮我解决这个问题。

【问题讨论】:

  • 必须在服务器上安装 Excel 应用程序并获得许可。

标签: asp.net com webserver office-interop somee


【解决方案1】:

您违反了办公自动化的基本规则——不要在服务器上执行此操作。期间。

可以将 Office 安装在服务器上,甚至可以手动注册一些内容以使其在测试时完成足以使 Web 应用程序运行一次或两次的操作。但是一旦将该应用程序移入生产环境,它就会开始失败——持续或间歇性地——甚至可能导致您的 Web 应用程序完全挂起。 Office 是一组应用程序,而不是一组数据操作库。它的一切都被设计成用户在交互式会话中运行它——它为许多操作创建窗口,并且它本质上是多进程的。您的服务器在非交互式会话中运行,在这种情况下窗口管理的规则是不同的。确实没有办法在服务器应用程序中确保 Office 自动化安全,尤其是托管多个应用程序/站点和/或高流量的服务器。

执行此操作的“正确”方法是使用将 Office 文档纯粹视为数据结构的库。执行此操作的库无需调用 Office 即可读取和操作文档中的数据。一个类比是 XML 文档——您使用像 .NET 的 XmlDocumentXDocument 这样的 XML API 从文件中读取数据,在内存中对其进行操作并将其存储回磁盘。这与尝试自动化用户使用某些可视化 XML 编辑器应用程序执行的操作非常不同。

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

【讨论】:

  • @MiLaDA 我还强烈建议您下载 Open XML Productivity Tool。此工具允许您打开一个 Open XML 文件(例如 Word 或 Excel 文档)并查看生成它所需的代码。 download.microsoft.com/download/5/5/3/…
猜你喜欢
  • 2011-05-14
  • 2012-02-17
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
相关资源
最近更新 更多