[C#]多版本Office在WinForm应用中的使用

563 Views

原本在为Winform做Excel导出工作时,使用的Office2010版本。

创建Excel对象方式为:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass()

但是服务器安装的版本为office2003,参考http://blog.csdn.net/baidu_27474941/article/details/52410693

修改嵌入互操作类型为True,特定版本=false。果然如预料的报错。将创建方式改为:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application()

报错:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: “object”未包含“get_Range”的定义

再修改函数:

get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnCount])
->
Range[worksheet.Cells[1, 1], worksheet.Cells[1, columnCount]]

编译上就没有问题了。

但是在多次删除重装Office wps之后只保留Office2003报错:System.InvalidCastException: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))

参考https://www.cnblogs.com/bile/p/3520439.html

在注册表中找到:HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.6 删除

office 2003对应的是1.5,所以删除1.6
office 2007对应的是1.6,所以要根据情况判断
WPS2016估计和office2007对应一样,所以完全删除就能解决问题

[C#]多版本Office在WinForm应用中的使用》有1条留言

留下回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据