接触VSTO纯属偶然,前段时间因为忙于一个项目,在客户端Excel中制作一个插件,从远程服务器端(SharePoint Excel Services)上下载Excel到本地打开,用户编辑后再上传回服务器端。当时工期紧迫,临时查了些资料,用VSTO + Excel COM API完成。正因为这个项目,我发现了VSTO的强大功能与潜力,决定抽出一些时间来好好研究下。
本系列所有示例代码均在 Visual Studio 2010 Beta 2 + Office 2010 Beta 下测试通过
一、什么是VSTO?
VSTO = Visual Studo Tools for Office,是.net平台下的Office开发技术。相对于传统的VBA(Visual Basic Application)开发,VSTO为中高级开发人员提供了更加强大的开发平台和语言,并部分解决了传统Office开发中的诸多问题(难于更新、可扩展性差、难以维护、安全性低等),开发人员可以使用熟悉的技术来构建更加灵活的、强大的、跨平台的企业级解决方案。
二、为什么要进行Office开发?
Office拥有强大的数据分析、显示和计算能力,尤其在桌面领域,已经成为了办公自动化的行业标准。虽然Office功能强大,但是也不可能满足各行各业的特定需求,如果能够借助于Office构建企业的个性需求,那将十分具有吸引力。这样,在不需要其他专业软件的情况下,就可能完成既定的目标。
三、Office开发简史
1、VBA(Visual Basic Application)
微软提出的第一种Office开发解决方案就是VBA,在20世纪九十年代VBA红极一时,借助于当时如日中天的Visual Basic,VBA取得了巨大的成功,无论是专业的开发人员,还是刚入门的非开发人员,都可以利用VBA完成简单或复杂的需求。但是VBA本身拥有很多的局限性,VB语言虽然简单,但是其语法令中高级开发人员不太适应,尤其是VBA的开发环境过于简单,缺少与时俱进的高级功能,使得VBA开发陷入了瓶颈。
2、VSTO 1.0(VSTO 2003)
时光跨入21世纪,微软发布了.net平台,并推出了新千年的新语言:C#,VBA一统Office开发天下的情况终于有所转变。从Office 2003开始,Office正式由一个桌面办公平台转化为了桌面开发平台,微软也适时推出了VSTO 2003,即VSTO 1.0。正是由此开始,Office开发跨入了一个新的时代,开发人员可以使用更加高级的语言和熟悉的技术来更容易的进行Office开发。VSTO 1.0完全编程支持Office 2000和Office XP,提供了以文档为中心的开发平台,开发人员使用.net framework 1.1开发Office中的一些自动化程序等。
3、VSTO 2.0(VSTO 2005 SE)
VSTO 2.0随同Visual Studio 2005推出,提供了大量新特性:
提供了新的文档模板 对Word、Excel的可视化支持 可以使用托管的Windows Forms控件或组件 宿主控件(不知道翻译的怎样:)) 支持在文档中添加智能标签 动作面板支持 数据绑定、数据源、数据模型支持 数据缓存 服务器端编程 配置文件 新的部署方式 InfoPath开始支持托管代码 与众不同的Outlook 托管插件VSTO 3.0随同Visual Studio 2008发布:
VSTO 3.0的新功能
VSTO 3.0具有大量的新功能,也增强了现有的关键功能。下面列出在VSTO 3.0中可用的改进Office解决方案开发工作的一些关键的新功能:
VSTO架构
VSTO应用程序由Office应用程序和.NET程序集组成。
我们期望下一版本能带来什么?
基于笔者的分析和作为一名VSTO开发者的经验,我们期望下一版本的VSTO:
虽然现在VSTO 4.0还没有正式发布,但是从测试版已经可以看出些端倪:
对64位Office 2010开发的支持 折叠工具栏项目支持 C# 4.0 、.net framework 4.0支持 一次针对所有用户部署Office项目 在单个包中部署多个Office项目 部署完Office项目后仍可以执行附加操作在C#中在调用COM对象如office对象时,经常需要写一堆不必要的参数:
object fileName = "Test.docx";
object missing = System.Reflection.Missing.Value;
doc.SaveAs(ref fileName,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
doc.SaveAs("Test.docx");
Automatic object -> dynamic mapping (自动类型转换)
Optional and named parameters (可选命名参数)
Optional "ref" modifier (可选 ref 修饰)
Interop type embedding ("No PIA") (主调程序集嵌入)
1、Office 2007 Enterprise Edition With SP2或更新版本
2、Visual Studio 2008 Team System With SP1 或更新版本
1、书籍:《VSTO 开发指南》,VSTO的权威著作,强烈推荐。
2)两位VSTO大师的博客,也是《VSTO 开发指南》的共同作者:
1、新建一个Office 2010的Excel Workbook项目: