Microsoft.Office.Core 引用以及 Microsoft.Office.Core.MsoTriState 的问题

遇到这个错误终于在这里找到了答案


这样,你的引用中就会出现以下内容(当然有可能以前就有了,不用更改office2003的安装)

(1).net中有Microsoft.Office.Interop.PowerPoint, Office

(2)com中有Microsoft.Office 11.0(或12.0) Object library

Microsoft.Office.Interop.PowerPoint肯定是要添加的.

但Office和Microsoft.Office 11.0(或12.0) Object library添加谁?

 

只添加Office足以!

 

实践证明,

 

(1)如果只添加Microsoft.Office 11.0(或12.0) Object library,会出现下面的错误:

 

错误 1 类型“Microsoft.Office.Core.MsoTriState”在未被引用的程序集中定义。必须添加对程序集“office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”的引用

(2)如果Office和Microsoft.Office 11.0(或12.0) Object library都添加,就会出现下面的错误:


错误 1 类型“Microsoft.Office.Core.MsoTriState”同时存在于“E:/Program Files/Microsoft Visual Studio 9.0/Visual Studio Tools for Office/PIA/Office12/Office.dll”和“C:/Documents and Settings/Administrator/我的文档/Visual Studio 2008/Projects/PPTPaser/ConsoleApplication1/obj/Debug/Interop.Microsoft.Office.Core.dll”中

 

原因是MsoTriState在两个dll中都出现了.

 

正确做法:只添加Office引用即可

 

这个问题耗了我很多时间解决,因此特地写此文,希望遇到相同问题的程序员能尽快解决之.

-----------------------------------------------------------------------------------------------------------------------------------------

ms.office.interop.excel.dll是有版本号的, 每个版本号对应OFFICE的一个版本

说的更直接一点,每个版本的dll都是通过调用相应版本EXCEL内核中的接口,来完成C#中读写EXCEL的,

(1) 1985年:Excel 1.0   
(2) 1993年:Excel 5.0——Office 4.2   
(3) 1995年:Excel 7.0(Excel 95) 
(4) 1997年:Excel 8.0(Excel 97) 
(5) 1999年:Excel 9.0(Excel 2000) 
(6) 2001年:Excel 10(Excel XP/2002)——Office XP/2002   
(7) 2003年:Excel 2003(Excel XP/2003)——  11.0  
(8) 2007年:Excel 2007(Excel XP/2007) —— 12.0

(9) 2010年:Excel 2010 —— 13.0

(10) 2012年:Excel 2013 ——14.0

-----------------------------------------------------------------------------------------------------------------------------

Microsoft.Vbe.Interop.dll和office.dll是啥

期间,想要集成Microsoft.Office.Interop.Excel.dll到exe中,但是另外却看到了两个dll:

Microsoft.Vbe.Interop.dll

office.dll

想要搞懂是啥,以及是否此处也要一并集成进来。

【解决过程】

1.参考:

Office 主要互操作程序集

http://msdn.microsoft.com/zh-cn/library/15s06t57%28v=vs.80%29.aspx

看到相关的解释了:

Microsoft Visual Basic for Applications Extensibility 5.3

Microsoft.Vbe.Interop.dll

Microsoft Forms 2.0 对象库 (可在应用程序中使用的可编程控件)

Microsoft.Vbe.Interop.Forms.dll

Microsoft Office 11.0 对象库 (Office 共享的功能)

office.dll

 

Microsoft Visual Basic for Applications Extensibility 5.3 的绑定重定向程序集

Policy.11.0.Microsoft.Vbe.Interop.dll

Microsoft Office 对象库的绑定重定向程序集

Policy.11.0.office.dll

【总结】

所以,看来,最好也是要在集成:

Microsoft.Office.Interop.Excel.dll

时,连带的一起把:

Microsoft.Vbe.Interop.dll

office.dll

都集成进来。

这样,才可以避免

别人在使用exe时,内部用到excel的dll时,完整的所需要的函数,都可以自带的找到了。

不会再对于Microsoft.Vbe.Interop.dll或office.dll报错说找不到。

--------------------------------------------------------------------------------------------------------------------------

先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Excel后发现他的api说明并不多,好在网上有很多朋友贴出了一些代码,我在不断的挫折中吸取了很多教训,现共享出来,给大家参考。

 

1. 最好在客户端使用,不要在B/S服务端使用,因为会受到IIS权限和占用内存影响,多人并发操作必然完蛋   

 

2. 需要引入两个DLL,Microsoft.Office.Interop.Excel.dll和office.dll,在加上项目的时候,会报错“类型“Microsoft.Office.Interop.Excel.ApplicationClass” 未定义构造函数无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。”,这时只需要将将引用的DLL:Microsoft.Office.Interop.Excel;的嵌入互操作类型改为false,就可以了

 

3. 注意Excel中sheetindex, rowindex,columnindex都是从1开始的

 

4. 理清Excel里面的对象(Application、Workbook、Worksheet、Range),其中Range包含行和列还有单元格,很多方法都是弱类型object,需要拆箱和装箱操作,循环读取效率并不高,所以我在读取大批量数据Excel时,采用的方式是将Excel调用另存为csv文件,再通过文本操作字符串的方式解析csv文件,读取每一行,实践证明,这样的效率比较高。解析csv文件在附件可以供大家下载 

 

5. 客户端必须正确安装office2003或office2007,如果是安装的wps系列的,需卸载后再重新安装office

 

这里我贴出我封装Excel的操作类,希望能对大家有所帮助,欢迎大家指正:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值