前段时间去图书馆借书,无意中发现这样一本书,书名是”新一代 .NET Office开发 Excel篇”,书名比较有意思,就借出来看看.看完以后,发现确实不错.它挖掘了Office产品中我们经常忽略的部分.比如图表,透视表等.下面根据我对这本书的笔记来看看VSTO这个被微软偷偷发布,而被我们遗弃的东东到底是什么样子?由于这本书只针对Excel部分做操作,所以这是重点,不过后面还有一个示例是基于Word的.
我们首先创建一个WindowApplication程序,然后引入必要的类库.如图-1所示.
图-1
创建WindowApplication的目的是熟悉Office操作的语法.我们现在用代码来实际操作一下Excel文件,代码比较简单,这里不再详述,如图-2所示
图-2
需要注意的地方
1. 在循环获取单元格值的时候,我们可以先将值放在一个二维数组中,再从二维数据中获取单元格值,效果会提升好几个档次.推荐使用
2. 使用完毕以后,或者窗体关闭时,一定要调用app1.Quit()方法,直接对Excel文件操作的话,进程方面还需要控制和处理,因为这里有隐患.
以上讲述的是最基本的操作,包括单元格取值和赋值等.
下面看一个VSTO的程序,VSTO的程序环境好像需要打个补丁之类的,具体情况记不清了.先说下我的环境VS2008 SP1+NET3.5SP1,环境搭好以后,我们直接创建一个项目文件,我的Office版本是2007.如图-3所示.如果没出现的话,请自行解决.博客园也有不少这方面的贴子,搜索下就OK了.
图-3
这里的项目文件是ExcelWorkBook1,这演示了如下几个功能.
功能1:Sheet1表单的录入,其数据取自Sheet2,并实现单元格下拉菜单功能(没有使用控件),并根据下拉菜单选中项联动生成其他单元格值,并计算单价和数量,生成金额的单元格值.如图-4所示
图-4
图-5
功能2:使用代码调用打印功能.是Excel自身的打印功能.如图-5所示
功能3:生成某一年日历
功能4:获取系统颜色,颜色取自System.Drawing.KnownColor[]对象
功能5:获取图形,注意是图形,不是图表
功能6:增加winform控件,对的,是WinForm控件(确定一定以及肯定).而且还可以动态创建.代码自行参考
功能7:还增加了一个这样的控件,如图-6所示.估计大家以前很少用到吧,呵呵.我看完这本书才知道的.它的作用是扩展Office项目文件的功能.比如:可以利用这个控件,拖动一些Winform控件,做些Office项目文件不能做的事情.比如:可以在Excel放置一些待播放的视频或音频文件.使用这个控件调用播放器,或显示其详细信息等.最常用的场景就是单据页面.使用Excel加载列表数据,这个控件做为单据页面,再搞个保存,取消按钮,也挺简单的.控件效果图如图-7所示
图-6
图-7
ExcelWorkbook1的示例文件,我们只是小试牛刀一下.下面的示例更加强大.很佩服微软,将事情简单化.只是我们自己总把事情复杂化.唉,悲催.
继续看ExcelWorkbook3的项目文件,项目布局如图-8所示. 这个项目文件包含如下几个功能
图-8
它所包含的功能如下
功能1:代码方式增加单元格批注功能
功能2:动态增加菜单栏,工具栏,事件可自行绑定
功能3:更改Application级别的属性
功能4:单元格或Sheet级别的复制
功能5:图表,整个Sheet就是一个图表,它与Sheet的级别相同,数据源可取自Excel文件本身,也可获取外部数据源.如图-9所示
图-9
功能6:图表,某个Sheet中,即包含数据也包含图表,如图-10所示
图-10
功能7:透视表.哈,这个功能要重点说下,这个功能有点像BI里的功能.可以钻取其下面的数据.如图-11所示.左侧部分是原始数据,右侧是已透视过的数据,而且生成的数据,字段列还可以自行显示/隐藏等.而且还可以根据透视数据生成图表,在示例代码中也包含的,可自行参数.这个功能可以用在含有决策功能的功能系统里,比如:某个部门的销售额,某个科室的日收入支出表等.使用Excel的这个功能,比起那些图表控件,不知道要方便多少.有篇参考文章,地址如下:
http://www.cnblogs.com/cameo/archive/2008/12/01/1344956.html
不过,有个技术点没有研究清楚.就是VSTO的项目文件,发布好以后,如何在Web程序里显示.有知道的童鞋,请点拔一二.
图-11
功能8:调用WebService功能.一开始感觉会非常复杂.尝试之后,才发现其实和WinForm调用WebService方式是一样的.如图-12所示.WebService的地址是我在网上找的,貌似不太稳定,有时会连不上.大家可以自己另外找个.
图-12
以上是关于Excel部分的示例.下面说一个更加重量级的,基于Word的插件式功能.它使用了WPF和WCF技术,算是很潮吧.它包括3个项目文件.如图-13所示.
这个项目参考地址如下http://msdn.microsoft.com/zh-cn/magazine/cc163292.aspx
有示例demo可以直接下载,我是将其中的代码自已写了一遍!这里要注意的是WCF的发布!
图-13
先说下这个Word插件的功能,是将一组图片以幻灯片方式加载到Word文档中,选中某张图片,将图片描述显示到Word文档中.基中,展示图片的控件就是WPF,它被用在了WinForm控件中(有点意思吧).图片描述文字放在XML文件中,通过WCF方式获取(更有点意思吧).先看下最终的效果图,如图-14所示
图-14
简单说下项目的功能
WCFServiceLibrary项目,功能是定义WCF服务,有点意思的是,这个类库是Net2.0的,加载一下WCF的相关类库,也是可以用的.我之前一直以为只有3.5才可以呢.
WPFControlLibrary是WPF的用户控件,类库是3.5的.创建好WPF控件以后,如何转为WinForm控件呢?是通过创建WinForm的用户控件,然后里面再加载WPF控件就可以了.如图-15所示
图-15
WordAddIn1项目文件创建的是类型的项目文件.其中的WinFishEyeByWPF控件就是包装了WPF控件的WinForm自定义控件.里面的代码不详细讲了.大家自己看吧,感觉不是很复杂的.有VSTO基础的人看起来会更容易理解!
好了,这个示例就讲这么多,之所以要讲一篇VSTO的文章,是因为它其实可以代替我们做很多事情的,只是我们平常忽略了他,只是把Excel文件用来存储数据.导入导出数据使用,如果合理运用,我们完整可以基于Office文档开发出一套管理系统,功能不比使用VS开发出的WinForm或WebForm逊色的.
端午节,吃粽子去了,祝各位节日快乐!
示例代码
http://www.cnblogs.com/xiyang1011/archive/2011/06/07/2074025.html