使用excel抛出异常TYPE_E_CANTLOADLIBRARY的C#程序

时间:2015-05-05 21:16:28

标签: c# .net excel interop vsto

所以我制作了一个程序,从Excel文件(.xlsx)读取一些单元格,然后用数据进行在线搜索。

它在我的计算机上运行正常(Windows 8.1,Visual Studio Community 2013,Office 2013)但是当我将其发送给另一台计算机上的朋友(Windows 8.1,没有Visual Studio,Office 2010)时,该程序显示错误消息说(葡萄牙语翻译不好):

  

System.InvalidCastException:无法转换COM   “Microsoft.Office.Interop.Excel.ApplicationClass”类型的对象   接口类型'Microsoft.Office.Interop.Excel._Application'。这个   操作失败,因为QueryInterface调用组件COM为   IID'{000208D5-0000-0000-C000-000000000046}'的界面失败   由于以下错误:加载库/ DLL时出错   类型。 (ExceçãodeHRESULT:0x80029C4A(TYPE_E_CANTLOADLIBRARY))。

  

System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc,IntPtr   pCPCMD,IntPtr& ppTarget,Boolean& pfNeedsRelease)in   Microsoft.Office.Interop.Excel.ApplicationClass.get_Workbooks()in   ConsultaProcessos.MainForm.button1_Click(Object sender,EventArgs e)
  在System.Windows.Forms.Control.OnClick(EventArgs e)中   System.Windows.Forms.Button.OnClick(EventArgs e)in   System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)in   System.Windows.Forms.Control.WmMouseUp(Message& m,MouseButtons   按钮,Int32点击)   System.Windows.Forms.Control.WndProc(Message& m)in   System.Windows.Forms.ButtonBase.WndProc(Message& m)in   System.Windows.Forms.Button.WndProc(Message& m)in   System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)   em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&   m)在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32)中   msg,IntPtr wparam,IntPtr lparam)

我让他安装VSTO 2010和.NET Framework 4.5,但错误仍然存​​在。

我的项目已将Excel 15.0和Office 15.0以及VSTO 2010添加到参考文献中。

还有什么可以做的吗? 提前谢谢!

请参阅下面的部分代码

using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;

Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;

xlApp = new Excel.Application();
Console.WriteLine(Directory.GetCurrentDirectory());
xlWorkBook = xlApp.Workbooks.Open(fileName);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

//These two lines do the magic.
xlWorkSheet.Columns.ClearFormats();
xlWorkSheet.Rows.ClearFormats();

iTotalColumns = xlWorkSheet.UsedRange.Columns.Count;
iTotalRows = xlWorkSheet.UsedRange.Rows.Count;

修改 我尝试使用Office 2010在另一台计算机上运行,​​但它确实有效。它不适用于Office 2010的特定PC。 我将看看Technovation建议的注册表修复是否能解决这个问题。

1 个答案:

答案 0 :(得分:0)

  

我的办公室套餐是2013年,他的是2010年

首先,请确保使用最旧的Office版本中存在的属性和方法。尝试调用不存在的方法或属性时,您将收到异常。我建议将interop类型嵌入到程序集中,将PIA的 Embed interop types 属性设置为true(在.net 4.0及更高版本中可用)。

目标PC(有问题的)是否安装了MS2的Click2Run版本?

事实是Office 2010的Click2Run版本不支持自动化。 Click2Run应用程序没有自动化界面,无法自动化。有关详细信息,请参阅Office 2010 Click-to-Run compatibility with add-ins。它声明:

  

进程外加载项/应用程序是使用Office对象模型API启动应用程序中的功能并与Office集成的独立程序,脚本或应用程序。在这种情况下,进程外应用程序驱动Office。点击运行不支持进程外应用程序。

另请参阅0x80029C4A (TYPE_E_CANTLOADLIBRARY)类似的论坛帖子。