- 我们的目标:
在这次的系列文章中,我们通过一些小例子,来循序渐进的学习VSTO for excel这个已经出现很久的技术,在平常的使用时,我很少发现比较全面或者具体的文章作介绍,当然,除了MSDN。
在我的博客开始这个系列,一为了巩固自己的相关技术知识,二也是为了和大家一起交流分享自己的技术心得和体会,希望能够获得更多宝贵的经验!
这个系列第一期大致有如下文章:
- Getting Start(Add-In级别)
- 简单的UI设计(Robbin)
- 批量操作(附带一个qq联系人导出例子,Add-In级别)J
- 丰富的自定义UI交互(Add-In级别)
- 部署Add-In组件到客户端
第二期将根据第一期的情况做灵活修改和调整,欢迎大家拍砖!
- 什么是VSTO:
是啊,什么是VSTO呢,其实很多朋友包括MSDN都给出了很好的定义,在此我就不再罗嗦,请大家通过如下网址进行查阅吧:
引用:http://blog.csdn.net/v_jzho/archive/2007/09/29/1806904.aspx
引用(官方对比):http://msdn.microsoft.com/zh-cn/library/zcfbd2sk(v=VS.80).aspx
- Excel对象模型:
在了解一个开发对象前,了解这个对象的模型是至关重要的,所以,再次还是照例,从MSDN搬来了对象模型介绍,全部是中文的,相信大家能够看懂。也请大家耐心的学习,毕竟这是日后很重要的一点!
引用:http://msdn.microsoft.com/zh-cn/library/wss56bz7(VS.80).aspx
- 开发环境:
既然做开发嘛,开发环境当然是要搭建的了,下面是摘抄自MSDN的一段介绍。在这里只做简单的介绍,因为当我们安装好VS08,并且装有Office2007时,这个开发环境已经基本上搭建完毕了。
在开发计算机上安装设计工具
- 安装 Office,包括主互操作程序集。有关更多信息,请参见 如何:安装 Office 主互操作程序集。
- 安装 Office 2003 SP1 或更高版本。有关更多信息,请参见 Office 2003 Service Pack 1 网站 (http://office.microsoft.com/zh-cn/officeupdate/default.aspx)。
- 安装 VSTO 2005,或安装 Visual Studio Team System 产品,包括编程语言 Visual Basic 或 Visual C#。
默认情况下,安装 Visual Basic 或 Visual C# 时 VSTO 2005 随 Visual Studio Team System 产品一起安装。
- 如果 Visual Studio 为英语版本,但使用的是非英语 Windows 设置,可安装 Visual Studio Tools for Office 语言包来以 Windows 使用的语言查看 Visual Studio Tools for Office 运行库消息。Visual Studio Tools for Office 语言包可从 Microsoft 下载中心 (http://www.microsoft.com/downloads/search.aspx?displaylang=zh-cn) 获得。Visual Studio Tools for Office 的非英语版本会自动安装该语言包。
如果在安装 Office 之前安装 Visual Studio Team System 产品,则必须通过运行运行库安装文件 (VSTOR.exe) 修复 Visual Studio Tools for Office 运行库。有关更多信息,请参见 如何:安装 Visual Studio Tools for Office 运行库。
- 第一个Add-In项目:
好了,在之前一大堆的铺垫完毕后,想必大家很想小露一手。请慢慢来,关于新建Office项目相信已经不是很难得了,如下图,我们建立一个以c#语言为基础的Office Excel Add-In(外接程序)项目。
因为在下的机器上没有03的office,不过放心,你也可以使用03的模板进行开发,这里为了方便,我使用07的模板(虽然需要.Net 3.5的框架……)然后打开后,我们看到项目结构如下:
很简单的内容,这个ThisAddIn.CS是什么呢?且听我慢慢道来。
这个ThisAddIn文件类似于一个外接程序(AddIn)的入口,所有比较重要的操作,包括对象的获取,均要在这里进行。
在MSDN里说的很明了:
When you create an Excel add-in project, Visual Studio generates a class, called ThisAddIn, which is the foundation of your solution. This class provides a starting point for writing your code, and it also exposes the object model of Excel to your add-in.
哈哈,多的就不罗嗦了。继续我们的代码吧。从最简单的开始,我们看到ThisAddIn中,有个StartUp方法,我们在这个方法里主要写一些在外接程序加载时的处理函数,比如注册事件、初始化对象等等,如下:
1 //注册事件
2 this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler(Application_WorkbookBeforeSave);
我们注册了一个自定义事件,这导致在保存完毕之前,插件对我们进行响应。然后,在ThisAddIn类中,添加刚才注册事件的实现函数代码如下:
/// <summary>
/// 保存前的函数代码
/// </summary>
/// <param name="Wb">Workbook参数</param>
/// <param name="SaveAsUI">保存选项</param>
/// <param name="Cancel">接受取消?</param>
void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook Wb, bool SaveAsUI, ref bool Cancel)
{
Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
Excel.Range firstRow = activeWorksheet.get_Range("A1", missing);
firstRow.EntireRow.Insert(Excel.XlInsertShiftDirection.xlShiftDown, System.Type.Missing);
Excel.Range newFirstRow = activeWorksheet.get_Range("A1", missing);
newFirstRow.Value2 = "This text was added by using code";
}
至此,一个简单的Add-In程序就完成了,还等什么,让我们一起来F5一下吧!
程序在调试时,打开一个空白的工作薄,然后我们点击保存后,注意,A1格的值被填充了。代表插件运行正常。到这里,第一篇文章就结束了,希望大家能有收获。(每一篇尽量简短干练)
至此,一个简单的Add-In程序就完成了,还等什么,让我们一起来F5一下吧!
程序在调试时,打开一个空白的工作薄,然后我们点击保存后,注意,A1格的值被填充了。代表插件运行正常。到这里,第一篇文章就结束了,希望大家能有收获。(每一篇尽量简短干练)——别走开,后面还有小Tips~~~
小Tips:
每次调试之后,我们最好都养成一个好习惯就是:回收!不然这些插件会莫名其妙的出问题,具体什么原因我实在说不上来,所以在这里先说说回收的习惯吧。
怎么回收呢?简单——“清理解决方案”、“清理项目”,这样,就ok了!