所以我制作了一个程序,从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建议的注册表修复是否能解决这个问题。
答案 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)类似的论坛帖子。