【问题标题】:Using Microsoft.Office.Interop to read excel file data giving exception. WPF app使用 Microsoft.Office.Interop 读取 excel 文件数据给出异常。 WPF 应用程序
【发布时间】:2012-11-05 10:37:14
【问题描述】:

我有 WPF 应用程序,它读取 excel 文件数据并将其显示在 UI 上。我正在使用Microsoft.Office.Interop 读取excel 文件数据,主要是.xlsx。在开发机器上的应用程序工作正常,但在某些计算机上安装和运行这个应用程序给了我这个错误:

Excel 检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG) 有什么可能的解决方案?

【问题讨论】:

  • 您是否在目标机器上安装了 Excel?没有 Excel,您将无法使用 Office.Interop。这里有一个不错的选择epplus.codeplex.com
  • 是的。 MS Office 安装在目标机器上。
  • 我只能建议尝试为 Microsoft Office 2010 from here 安装 PIA 2010,还请您检查您的应用程序是否为 x86 编译并且目标机器是 x64 或反之亦然。
  • 安装的 PIA。问题仍然存在。是的应用程序是为 x86 编译的。但是开发机器和目标机器都是64位的。在开发机器上工作正常。
  • 在目标机器上你有office64还是office32?

标签: c# wpf c#-4.0 .net-4.0 excel-interop


【解决方案1】:

Interop 库有很多缺点;首先是您需要在目标机器上安装一份 Excel 副本才能使用。

因此,我们的团队从不使用它。我建议以下替代方案。

http://npoi.codeplex.com(用于 MS 2003 文件 .xls 的旧库)。

http://epplus.codeplex.com(较新的库,API 更简单,可处理 2007 文件 .xlsx)

不需要 Excel 在服务器上。

【讨论】:

  • 不能替换现有的实现,我能做的就是对现有的做一些改变。
  • 恕我直言,如果您可以访问代码,您几乎可以做任何您喜欢的事情。与在服务器上安装 Excel 副本相比,引用附加库的侵入性要小得多。
【解决方案2】:

还有Microsoft Access Database Engine 2010 Redistributable

  • 允许对 Excel 文件进行简单查询(也包括 Linq),
  • 免费并且易于安装在您部署应用程序的服务器上,
  • 不需要在 terget 机器上安装 Office

【讨论】:

  • 是否需要在目标机器上安装 Office?
  • 其实是桌面应用所以是不是需要在所有目标机器上安装好才能运行我的应用?
  • 它是一个可执行文件,它需要安装在所有目标机器上,不需要安装Office,来自微软,是免费的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多