无法将类型为“System.ComObject”的 COM 对象强制转换为接口类型.如何解决
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型.怎么解决?
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。
------解决方案--------------------
COM错误:无法加载dll
如果确认已安装了excel,看看它的版本和你在自己机器上引用的Excel组件版本一致
其实你可以在catch块里多一道动态创建的操作
只给你思路,上面的GUID和progID可以通过 控制面板 > 管理工具 > 组件服务 -> DCOM 中找到(找不到则说明没有安装成功)
object excelComObj = Activator.CreateInstance(type);
//或者你也可以通过ProID,也就是COM组件名的方式创建
object excelComObj = Marshal.GetActiveObject("Microsoft Excel Application"); //VB中也可以用GetObject()
object也可以用Net4.0之后的动态类型
否则你会由于C#编译时的类型检查,使用组件里的函数时非常麻烦(不停地反射),当然用VB.Net也会很方便
------解决方案--------------------
不看代码,先查环境
先看看office安装时excel的.net编程支持支持是否安装,
如果是精简版或者绿色版的office往往出问题;
其次,查下程序引用的版本和本地的版本是否一致,
不一致,重新添加引用。
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。
------解决方案--------------------
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 中找到(找不到则说明没有安装成功)
object excelComObj = Activator.CreateInstance(type);
//或者你也可以通过ProID,也就是COM组件名的方式创建
object excelComObj = Marshal.GetActiveObject("Microsoft Excel Application"); //VB中也可以用GetObject()
object也可以用Net4.0之后的动态类型
否则你会由于C#编译时的类型检查,使用组件里的函数时非常麻烦(不停地反射),当然用VB.Net也会很方便
------解决方案--------------------
不看代码,先查环境
先看看office安装时excel的.net编程支持支持是否安装,
如果是精简版或者绿色版的office往往出问题;
其次,查下程序引用的版本和本地的版本是否一致,
不一致,重新添加引用。