遇到这个错误终于在这里找到了答案
这样,你的引用中就会出现以下内容(当然有可能以前就有了,不用更改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的操作类,希望能对大家有所帮助,欢迎大家指正: