繁体   English   中英

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

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

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

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

我搜索了原因,我认为问题出在主机可能不支持的 excel 库或类似的东西上……谢谢你帮我弄清楚。

您违反了办公自动化的基本规则——不要在服务器上进行。 时期。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM