无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。 |
|
protected bool IsExistExecl()
{ try { xlApp = new Excel.Application(); if (xlApp == null) { returnMessage = “无法创建Excel对象,可能您的计算机未安装Excel!”; return false; } } catch (Exception ex) { returnMessage = “请正确安装Excel!”; //throw ex; return false; } return true; |
|
在这个地方出现错误 xlApp = new Excel.Application();
|
|
using Excel = Microsoft.Office.Interop.Excel;
|
|
Excel.Application xlApp = new Excel.Application();
当然应该是这样用,xlApp要赋值成Excel.Application的实例,它自己必须是个Excel.Application类型的对象 你不能先把他声明成COM对象啊 |
|
private Excel.Application xlApp;
|
|
using用法
要么写在类外面,最前面 using system.IO; 要么写成 |
|
using System;
using System.Collections.Generic; using System.Linq; using System.Text; using Excel = Microsoft.Office.Interop.Excel; using System.Data; using System.Drawing; using System.Collections; using System.Diagnostics; using System.Data.OleDb; using System.Windows.Forms; namespace QRCode public static ExcelIO GetInstance() #region Fields #region Properties /// <summary> #region Methods return true; |
|
using Excel = Microsoft.Office.Interop.Excel;
没见过这种写法,不报错? 改成 using Microsoft.Office.Interop.Excel; |
|
10分 |
COM错误:无法加载dll
如果确认已安装了excel,看看它的版本和你在自己机器上引用的Excel组件版本一致 其实你可以在catch块里多一道动态创建的操作 try { xlApp = new Excel.Application(); if (xlApp == null) { returnMessage = "无法创建Excel对象,可能您的计算机未安装Excel!"; return false; } } catch { try { var typeCLSID = Guid.Parse("000208D5-0000-0000-C000-000000000046"); type = System.Type.GetTypeFromCLSID(typeCLSID); object excelComObj = Activator.CreateInstance(type); } catch (Exception ex) { returnMessage = "请正确安装Excel!"; //throw ex; return false; } } 只给你思路,上面的GUID和progID可以通过 控制面板 > 管理工具 > 组件服务 -> DCOM 中找到(找不到则说明没有安装成功) |
30分 |
不看代码,先查环境 |
标题: Microsoft SQL Server Management Studio
—————————— 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.OLE.Interop.IServiceProvider”。此操作失败的原因是对 IID 为“{6D5140C1-7436-11CE-8034-00AA006009FA}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。 (Microsoft.VisualStudio.OLE.Interop) 程序位置: 在 Microsoft.VisualStudio.OLE.Interop.IServiceProvider.QueryService(Guid& guidService, Guid& riid, IntPtr& ppvObject) |