接上一篇:,我们通过VSTO,简单的使用了Ribbon控件,以及如何从QQ邮箱导出联系人。
在有了这些基础之后,我们来开始一个比较复杂的实验吧,这回,我们将对那个生成的联系人Excel文档进行处理,提取出每个好友的QQ号码,然后再将这些号码对应的复制到这些联系人后面。具体效果如何,还是慢慢来看。
慢慢来——
首先,还是建立一个Excel2007的外接程序项目,然后向项目中添加项,选择Office——>功能区(可视化设计),如下图:
我们双击新添加的那个文件,即可打开UI设计界面。
接下来呢,我们就要开始编辑Ribbon1的设计界面了,拖放一个Button空间到Group中,如下图:
我们的程序见面如下所示:
粗略的设计就是如此,大家可以花点时间,慢慢研究Ribbon自带的各类控件的使用,相信通过一段时间,大家能够设计出自己所喜欢的外观。在这里就仅作演示吧。
我们要做什么——
接下来,我们开始最关键的代码编写工作了,首先,我们要明白三件事:
- 获取某一列的所有单元格数据
- 处理每一个单元格的数据
- 把处理后的数据添加到指定列中进行显示
所以,很明确,我们的代码也分为这几步,首先,获取当前的工作薄,其中的某一个区域,我们使用get_range方法来实现,就本例子而言呢,腾讯邮箱生成的那个联系人表格,B列,是每个人的QQ邮箱,我们的QQ号码就从这里提取,提取到邮箱后,把@符号及之后的字符去掉,保留前端的QQ号码,并把处理过后的结果,放到该表格的指定列里面。大致意图,如下所示:
当然了,上图所示,绿色区域为指定的显示列,红色区域为待处理,实际中,绿色的部分可以随意指定。在这里也是举个例子罢了。好啦,有图了,接下来是寻求真相的过程。
通过之前的分析,我们需要先铺垫个小知识:
如何获取一定区域(范围)的单元格?
这个相信大家谷歌一下绝对能找出方法,这里就不在赘述,此文的方法为使用Worksheet的get_range方法,在MSDN中,详细的介绍了此方法的使用,小弟也给出地址,大家可以慢慢参考:
这是一个英文地址,为什么呢?主要是它比较关键的说道,在这个方法的参数中,可以使用语意参数,比如,我要获取A1到C4这个4x4区域范围的所有单元格,你可以这么写get_range("A1:C4",Type.Missing)。
反而中文版的文档中,却没提到……不知道是不是我没找到还是什么的……>_<|||.
这个问题一解决了,那后面的事情就好办了,看代码:
相信注释已经比较详细了,代码不太美观,也仅仅作为演示使用了。
之后,为那个Ribbon上的按钮添加单击事件代码:
ok,至此,这个程序就制作完毕了,下面就是来看看运行效果对不对,测试结果如下图:
小结:
大家也许看到了吧,如果联系人用了一个文字类的邮箱替代了QQ号码邮箱,则这个结果是文字的,并不能够当做QQ号码来用,所以,这次示例的局限性也很明显,收到了联系人表格的限制,不过,我们也从简单的RibbonUI设计,走到了具体的Excel对象操作,接下来,还有各种各样的Excel对象操作,内容包罗万象,可想而知不是一个系列就能写完的,我们关注的是VSTO能给我们带来什么新的变化。
试想,客户已经基于Office套件,进行着各类业务数据的存储、处理,相对来说,比较成熟。但是某一天,他需要对Excel表格数据进行一些不大不小的分析,比如报表、统计等等。难道我们给他从Asp.net开始……Bla……Bla。
我们换个思路,紧紧抓住客户最关心的业务来开展我们的工作,直接为Excel客户端开发Add-In级别的插件,以解决最实际的需求为目标,这不是更好吗?当然,效率、可维护性、可扩展性……等等一大堆话题将会被引入……
这只是我一己之见吧,希望广大园友热烈拍砖~~
下一节,将会带来一些部署方面的说明和探讨。