循序渐进,探寻Excel二次开发.NET源码

转载 2007年09月20日 09:30:00
循序渐进,探寻Excel二次开发.NET源码(1)
MS Excel功能我就不用多说了,总的来说强大方便灵活,应用广泛。用Excel来做数据存储、报表并实现打印非常方便,通常办公处理。值得高兴的是Excel提供了二次开发的功能以满足各个不同层次的需要,为程序员自己动手模拟Excel操作提供了极大的便利性,并可充分利用Excel提供的特性开发出更多实用的应用。   以往做Excel二次开发都用VBA,它是VB的一个简化版,我们打开Excel后单击工具——宏——Visual Basic编辑器就可以进行二次开发。我们现在要说的不是这种VBA二次开发,而是在.NET下进行二次开发。
  我们的最终目标是:利用.NET提供的开发工具快速实现Excel的二次开发,这其中包括最基本的单元格及带区数据存取、合并、字体颜色、边框及网格线等,由浅入深,由基本实现到组合功能,最终实现报表设计、套打、模板打印,充分利用Excel自身强大功能搞定任意复杂格式、报表、统计图形分析。
  从本篇开始,我们将以循序渐进,探寻Excel二次开发.NET的方式,逐步讲述Excel的二次开发并实现以下几点:
 1、如何将各版本Excel(COM类型库) 转换生成.Net公共语言运行库程序集如Interop.Excel.dll
 2、如何引用Excel库或已生成的程序集
 3、创建Excel实例
 4、打开Excel工作薄工作表和模板
 5、增、删、改、插入、定位、重命名工作表
 6、获取活动工作表指定范围单元格及带区
 7、读、写单元格内容
 8、向带区中写内容
 9、单元格合并
 10、字体及颜色
 11、边框及网格线
 12、保存、另存
 13、打印、预览
 14、彻底关闭Excel进程
 15、综合应用,通打天下报表
 ...

  本篇中,将说一说在项目中添加Excel引用的方法。以后的所以篇目中,都假设读都对VS 2003开发平台有一定的了解,所以,省略一些文字,如新建立一个项目什么的,我想那些就没必要了。
  我的宗旨:简单快捷,易用实用,因此,在以后的篇目中以程序居多,描述尽量少些,多些注释。但是这篇,哈哈,只有描述了。
第一步:
在项目的引用节点单击右键,在弹出的菜单中单击添加引用...
在弹出的对话框中单击COM项,找到Microsoft Excel 11.0 Object Library
并单击选中,然后单击选择按钮,如图“引用Excel2003”。

从中我们可以看出是引用的Excel.Exe文件,这是Excel2003版。Excel2000及Excel2002即Excel XP
COM项见“Excel版本对照表”。

第二步:
引用Excel2003后,会在引用节点中增加Excel等节点,如图“引用Excel2003后可删除不必要的引用”。

进入项目的bin/Debug目录可以看到,相应的增加了Interop.Excel.dll、Interop.Microsoft.Office.Core.dll、Interop.VBIDE.dll三个库文件,它们都是.Net将 COM 类型库中的类型定义转换为.Net公共语言运行库程序集中的等效定义生成的文件。
我们只需要引用Interop.Excel.dll就可以了,后面的两个文件是支持文件,不添加这两个文件的引用时在调试程序时如果有编译不通过的如语法错误会提示未能找到依赖项Interop.Office、Interop.VBIDE,一般这是个假象,除非是你和程序确实用到了他们,如果没有语法错误,编译器就不会提示了:)。
我们在引用中将Microsoft.Office.Core、stdole、VBIDE选中删除掉。也可以将Excel引用删除掉重新直接引用Interop.Excel.dll。

另一种方法是直接添加对Interop.Excel.dll的引用。

生成Interop.Excel.dll的另一方法:
以上是可视化自动生成Excel对应的程序集,也可以用如下的方法生成。
打开Visual Studio .Net2003命令提示,运行
TlbImp Excel.EXE Interop.Excel.dll
如果是Excel2000,则
TlbImp Excel9.olb Interop.Excel.dll
当然,第一参数Excel.EXE(Excel9.olb)要指定目录(Office2000安装目录),如果不指定,需要把它拷贝到VS.Net安装路径下
如C:/Visual Studio.Net/SDK/v1.1/Bin;
同理,第二参数Interop.Excel.dll是生成的对应的动态库,如果不指定目录,默认生成在VS.Net安装路径BIN下 ,你可以用你自己喜欢的名字
取代Interop.Excel.dll,生成之后你就可以在VS.Net开发环境项目中添加对它的引用了。
Tlbimp.exe为类型库导入程序,它将 COM 类型库中的类型定义转换为公共语言运行库程序集中的等效定义,关于它的详细使用参见MSDN。

用第一种方法和第二种方法引用的库和默认文件目录为分别如下:
Excel 2000是
Microsoft Excel 9.0 Object Library
 C:/Program Files/Microsoft Office/Office/EXCEL9.OLB

Excel 2002(XP)是
Microsoft Excel 10.0 Object Library
 C:/Program Files/Microsoft Office/OFFICE10/EXCEL.EXE

Excel 2003是
Microsoft Excel 11.0 Object Library
 C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE

----------------------------------------Excel版本对照表----------------------------------------
 文件/版本 Interop.Excel.dllInterop.Office.dll Interop.VBIDE.dll 添加引用/COM组件 2000 V1.3.0.0 V2.1.0.0 V5.3.0.0 Microsoft Excel  9.0 Object Library(EXCEL9.OLB) 2002(XP) V1.4.0.0 V2.2.0.0 V5.3.0.0 Microsoft Excel 10.0 Object Library(Excel.EXE文件) 2003 V1.5.0.0 V2.3.0.0 V5.3.0.0 Microsoft Excel 11.0 Object Library(Excel.EXE文件)
相关源码下载信息请访问:
http://blog.csdn.net/flygoldfish
   

经常很多朋友把源程序发给我帮忙调试,这其中除了关于.NET打印方面的问题外,也有很多关于Excel的,他们基本上是通过MIS金质打印通和我的Blog及我的个人主页中了解到我做过打印及Excel二次开发的。我发现,虽然是用.NET做Excel开发,但是很大部分人并没有对Excel操作作一次封装,也就是说没有用到面向对象。在很多操作中都是实例Excel.Application、Workbook,然后对WorkSheet进行操作。 在CSDN上也有不少关Excel的操作问题,贴出来的代码也有类似问题。

  说到面向对象,其实就是为了更好的理解事物的本质属性和封装,便于维护与扩展。日后你也许忘记了如何直接写代码打开并操作Excel,它其中是如何工作了,这也并不影响你,你只要直接调用就可以了。如果是基于过程的,每次调用Excel都是写同样的代码,这时,你需要考虑重构,可以参考Martin Fowler
的《重构:改善既有代码的设计》。试想一下,多次拷贝粘贴同一代码,修修补补,如果当初写代码有欠考虑周全,不妥之外难免,谁知道有多少处同样的错误需要改正,即使使用Ctrl+F,也难免有漏网之鱼。而重构之后,相同的代码只有一份,需要改的地方只有一处,应用面向对象,可以快速定位,因为它是实现于某个类中的,直接就可以找到相同的方法或属性准确定位。

  Excel功能强大,我们用不到也不可能全部用完Excel的所有功能,需要实现一些我们常用的且重要的功能,但是需要有一个简单的入口和操作模式。这其实是就 GOF23个精典设计模式之一 Facade(外观)模式,可以参考《设计模式:可复用面向对象软件的基础》,建议有一两年开发经验的人阅读。

  题外话:老实说,没有写过程程序的人看《设计模式》简直就是看天书,即使有一定程序经验也不是很好理解,这需要在实践中去体验。做了一两年程序,你也许根本不知道有《设计模式》这东东,但是,你却自己实际上用了设计模式。学习设计模式不仅是设计的需要,代码的需要,更是交流的需要。如果某老人家自诩自己是高手,什么都通,但在和人交流时别人说用观察者,哈哈,不知所云。当然,这也并不防碍他仍然是高手,高手的定义犹如集合的定义,是一个不确定的定义。有些时候,不要刻意的追求设计和技术,但是可以肯定,只要你能做出实用的东东,你其实就是用户心目中的英雄。

  从现在开始,我们就来封装Excel操作并提出一些简单的重构方法。  

  进入Vs2003 IDE,从文件菜单上单击新建项目,项目类型为C#或VB,以下以C#为例(并提供相应的VB.NET代码或进行说明,使用示例代码全部用C#与VB.NET对照写,哈哈,毕竟2002年之前我也是VB程序员,还要想想统一战线上的朋友,不能忘了根)在模板中选择类库。

  为了此系列关于Excel文章的连贯性和统一性,并且和我发布的源码一致,名称估且叫GoldPrinter.ExcelExpert,确定即可。在打开的开发环境中,引用Excel.dll(参见Excel系列文章第一篇)。删除解决方案资源管理器中默认生成的Class1.cs。

  在项目上鼠标右键单击后添加一个新类,名称为:ExcelBase。。。

P2P远程控制C#.net二次开发源码

  • 2017年06月09日 19:57
  • 870KB
  • 下载

AutoCAD .NET API二次开发学习指南

AutoCAD作为Autodesk公司的旗舰产品,已经在各个行业得到了广泛的应用,DWG格式更是成为事实上的工业标准。与其说AutoCAD是一个产品,不如说是一个平台,国内外的广大开发者已经开发出了基...

深入简出 AutoCAD.NET二次开发 简摘

第三章  程序设计基础 一、技术概况 ADO.NET ,WinForm,LINQ,WPF,WCF,XML,WebService 其中 自己的盲点: 1、反射reflection 2、LINQ...

3ds Max .NET二次开发的基础入门篇

3ds Max .NET SDK由以下.NET程序集组成。3ds Max从bin / assemblies文件夹中加载插件。 public static class AssemblyEntry ...

E8.Net工作流二次开发架构.

  • 2014年06月28日 13:18
  • 2.15MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:循序渐进,探寻Excel二次开发.NET源码
举报原因:
原因补充:

(最多只允许输入30个字)