[转]VSTO+WinForm+WebService+WCF+WPF示例

看到一个不错的示例程序分享给大家,Vincent.Q的《VSTO+WinForm+WebService+WCF+WPF示例》很不错!
原文如下:
   前段时间去图书馆借书,无意中发现这样一本书,书名是”新一代 .NET Office开发 Excel篇”,书名比较有意思,就借出来看看.看完以后,发现确实不错.它挖掘了Office产品中我们经常忽略的部分.比如图表,透视表等.下面根据我对这本书的笔记来看看VSTO这个被微软偷偷发布,而被我们遗弃的东东到底是什么样子?由于这本书只针对Excel部分做操作,所以这是重点,不过后面还有一个示例是基于Word的.

      我们首先创建一个WindowApplication程序,然后引入必要的类库.如图-1所示.

clip_image001

图-1

      创建WindowApplication的目的是熟悉Office操作的语法.我们现在用代码来实际操作一下Excel文件,代码比较简单,这里不再详述,如图-2所示

clip_image003

图-2

      需要注意的地方

      1. 在循环获取单元格值的时候,我们可以先将值放在一个二维数组中,再从二维数据中获取单元格值,效果会提升好几个档次.推荐使用

      2. 使用完毕以后,或者窗体关闭时,一定要调用app1.Quit()方法,直接对Excel文件操作的话,进程方面还需要控制和处理,因为这里有隐患.

      以上讲述的是最基本的操作,包括单元格取值和赋值等.

      下面看一个VSTO的程序,VSTO的程序环境好像需要打个补丁之类的,具体情况记不清了.先说下我的环境VS2008 SP1+NET3.5SP1,环境搭好以后,我们直接创建一个项目文件,我的Office版本是2007.如图-3所示.如果没出现的话,请自行解决.博客园也有不少这方面的贴子,搜索下就OK了.

clip_image005

图-3

      这里的项目文件是ExcelWorkBook1,这演示了如下几个功能.

功能1:Sheet1表单的录入,其数据取自Sheet2,并实现单元格下拉菜单功能(没有使用控件),并根据下拉菜单选中项联动生成其他单元格值,并计算单价和数量,生成金额的单元格值.如图-4所示

clip_image007

图-4

clip_image009

图-5

功能2:使用代码调用打印功能.是Excel自身的打印功能.如图-5所示

功能3:生成某一年日历

功能4:获取系统颜色,颜色取自System.Drawing.KnownColor[]对象

功能5:获取图形,注意是图形,不是图表

功能6:增加winform控件,对的,是WinForm控件(确定一定以及肯定).而且还可以动态创建.代码自行参考

功能7:还增加了一个这样的控件,如图-6所示.估计大家以前很少用到吧,呵呵.我看完这本书才知道的.它的作用是扩展Office项目文件的功能.比如:可以利用这个控件,拖动一些Winform控件,做些Office项目文件不能做的事情.比如:可以在Excel放置一些待播放的视频或音频文件.使用这个控件调用播放器,或显示其详细信息等.最常用的场景就是单据页面.使用Excel加载列表数据,这个控件做为单据页面,再搞个保存,取消按钮,也挺简单的.控件效果图如图-7所示

clip_image010

图-6

clip_image011

图-7

      ExcelWorkbook1的示例文件,我们只是小试牛刀一下.下面的示例更加强大.很佩服微软,将事情简单化.只是我们自己总把事情复杂化.唉,悲催.

     继续看ExcelWorkbook3的项目文件,项目布局如图-8所示. 这个项目文件包含如下几个功能

clip_image012

图-8

它所包含的功能如下

功能1:代码方式增加单元格批注功能

功能2:动态增加菜单栏,工具栏,事件可自行绑定

功能3:更改Application级别的属性

功能4:单元格或Sheet级别的复制

功能5:图表,整个Sheet就是一个图表,它与Sheet的级别相同,数据源可取自Excel文件本身,也可获取外部数据源.如图-9所示

clip_image013

图-9

功能6:图表,某个Sheet中,即包含数据也包含图表,如图-10所示

clip_image015

图-10

功能7:透视表.哈,这个功能要重点说下,这个功能有点像BI里的功能.可以钻取其下面的数据.如图-11所示.左侧部分是原始数据,右侧是已透视过的数据,而且生成的数据,字段列还可以自行显示/隐藏等.而且还可以根据透视数据生成图表,在示例代码中也包含的,可自行参数.这个功能可以用在含有决策功能的功能系统里,比如:某个部门的销售额,某个科室的日收入支出表等.使用Excel的这个功能,比起那些图表控件,不知道要方便多少.有篇参考文章,地址如下:

http://www.cnblogs.com/cameo/archive/2008/12/01/1344956.html

      不过,有个技术点没有研究清楚.就是VSTO的项目文件,发布好以后,如何在Web程序里显示.有知道的童鞋,请点拔一二.

clip_image017

图-11

功能8:调用WebService功能.一开始感觉会非常复杂.尝试之后,才发现其实和WinForm调用WebService方式是一样的.如图-12所示.WebService的地址是我在网上找的,貌似不太稳定,有时会连不上.大家可以自己另外找个.

clip_image018

图-12

      以上是关于Excel部分的示例.下面说一个更加重量级的,基于Word的插件式功能.它使用了WPF和WCF技术,算是很潮吧.它包括3个项目文件.如图-13所示.

      这个项目参考地址如下http://msdn.microsoft.com/zh-cn/magazine/cc163292.aspx

      有示例demo可以直接下载,我是将其中的代码自已写了一遍!这里要注意的是WCF的发布!

clip_image019

图-13

      先说下这个Word插件的功能,是将一组图片以幻灯片方式加载到Word文档中,选中某张图片,将图片描述显示到Word文档中.基中,展示图片的控件就是WPF,它被用在了WinForm控件中(有点意思吧).图片描述文字放在XML文件中,通过WCF方式获取(更有点意思吧).先看下最终的效果图,如图-14所示

clip_image021

图-14

简单说下项目的功能

      WCFServiceLibrary项目,功能是定义WCF服务,有点意思的是,这个类库是Net2.0的,加载一下WCF的相关类库,也是可以用的.我之前一直以为只有3.5才可以呢.

      WPFControlLibrary是WPF的用户控件,类库是3.5的.创建好WPF控件以后,如何转为WinForm控件呢?是通过创建WinForm的用户控件,然后里面再加载WPF控件就可以了.如图-15所示

clip_image022

图-15

      WordAddIn1项目文件创建的是clip_image023类型的项目文件.其中的WinFishEyeByWPF控件就是包装了WPF控件的WinForm自定义控件.里面的代码不详细讲了.大家自己看吧,感觉不是很复杂的.有VSTO基础的人看起来会更容易理解!

      好了,这个示例就讲这么多,之所以要讲一篇VSTO的文章,是因为它其实可以代替我们做很多事情的,只是我们平常忽略了他,只是把Excel文件用来存储数据.导入导出数据使用,如果合理运用,我们完整可以基于Office文档开发出一套管理系统,功能不比使用VS开发出的WinForm或WebForm逊色的.

原文链接:Vincent.Q的《VSTO+WinForm+WebService+WCF+WPF示例》,原文有示例代码可以下载!

posted @ 2013-02-23 18:43  SanMaoSpace  阅读(2483)  评论(0编辑  收藏  举报