首先来看一看Office 的开发方式。
一 Office开发方式
1 VBA (Visual Basic Application)
VBA是一种Visual Basic的宏言语,它应该是最早的Office提供定制化的一种处理计划,在1994年发行的Excel 5.0版本中,就具备了VBA的宏功用。从名字上似乎能够看出他是VB的一个子集,和Visual Basic不同,VBA是一种宿主型言语。由于那个时分Visual Basic十分火, VBA获得了很大的胜利,无论是专业的开发人员,还是刚入门的非开发人员,都能够应用VBA完成简单或复杂的需求。如今在一些办公环境中,VBA用的十分多,比方国内比拟著名的ExcelHome论坛,上面就有很多关于Excel VBA的讨论,而且VBA还可以调研Com组件里面的一些办法,在其他的Office开放方式中,如VSTO或者SharedAddin中,VBA有时分能够辅助完成某些功用,如RTD函数,UDF函数的调用,专用模板的开发,动画效果的演示等等。不光是Office,有很多其他的软件业比方比拟有名的ArcGIS,CorelDraw等软件,都提供了VBA的定制化处理计划。
但是他也有很多缺陷。VBA自身具有很多的局限性,比方短少一些常用的类型,调试起来不便当,VB言语固然简单,但是如今又很多的开发者都运用的是.NET,VB的一些语法可能很多人不顺应。再就是VBA是一种脚本类型的解释型的言语,在平安性比方源代码容易被破解,就像Javascript失密性不好一样,在执行效率方面没有一些编译型处理计划来的快。举个例子,比方说,我们能够把我们的自定义函数运用VBA来编写,然后存储为.xla文件,这样在Excel中就能够调用我们的这些函数了。但是由于VBA是解释型的言语,就像JavaScript那样,每次运转都要边解释边运转,而不是像其他一些言语,在编译成二进制后,就能直接加载运转。所以能够将我们的自定义函数写到类库然后注册,或者直接运用C++,将函数写到xll中,这样效率和平安性方面要比VBA方式要好,这里只是略微提一下,后面的文章会细致引见。
2 Shared Addin
SharedAddin,就像Visual Studio能够外接插件一样,也能够运用一些技术为Office开发一些插件。对VBA的一些问题,一些专业的开发人员,能够运用VisualBasic或者VisualC++等工具来援用Office的一些dll,来针对Office停止开发。开发的时分将dll注册为com组件,并在注册表里面停止注册,这样就能够在Office里面直接调用这些插件了。
Com Addin方式根本上处理了VBA存在的平安性及效率低的问题,但是他请求的门槛比拟高,即便是专业的开发人员也不一定可以很好的控制。Com Addin还有一个优点是,运用这个开发可以补偿VSTO在某些版本尚不支持的为难,比方VSTO的Ribbon菜单在07以下版本中就不能支持,并且在1.0版本下不支持Application Level级别的开发。运用Com Addin开发,可以使得插件能够具有较好的兼容性。
GeodesiX是一个天文信息Excel插件,他可以将在Excel中与GoogleMap停止交互,比方绘制专题图,停止缓冲辨别析,叠加,图示邮递员问题等等。
3 VSTO (Visual Studio Tools for Office)
2000年微软发布了.NET平台战略之后,推出了一系列运转在.NET上新言语如C#和VB.NET。在这种状况下,开发者可以运用.NET 平台上的言语来开发Office。 从Office 2003开端,微软推出了VSTO 1.0。VSTO主要是对Office的一些dll停止了.NET封装,使得我们能够运用.NET上的言语来便当的对Office的一些办法停止调用。所以,Office开发跨入了一个新的时期,开发人员能够运用愈加高级的言语和熟习的技术来更容易的停止Office开发。VSTO 1.0是随同着.NET 1.0平台推出的,支持Office 03以上的一切版本。
关于企业及的应用和开发,VSTO或许是首要选择,他极大地扩展了Office应用程序的才能,运用.NET平台支持的编程言语,可以直接访问.NET上面众多的类库。具有较好的平安机制。简化了Office插件的开发和部署。
VSTO也有一些缺陷,比拟明显的是他依赖于.NET 平台,在部署的时分,可能需求在目的机器上装置.NET Framework框架,再者就是版本的兼容性,没有哪一个VSTO版本可以兼容一切的Office版本。
下面是VSTO的各个版本及对应的支持的.NET平台以及对各Office版本的支持。
以上图表在 http://en.wikipedia.org/wiki/Visual_Studio_Tools_for_Office 的根底上停止了修正
提到VSTO,有一个比拟重要的问题就是Document Level 还是Application Level程序,在创立VSTO应用程序的时分,就必需停止选择。就像称号所说的那样,Document level就是指对单个Word或者Excel文档停止自定义开发,该文件翻开时,就加载,关闭时就卸载。假如是Application Level级别的,就是对应用程序中一切翻开的文档实例都可以起作用,应用程序加载时插件加载,应用程序关闭时插件卸载。
SharedAdd和VSTO两者很多人都弄不分明,他俩既有相同的中央也有不同点,关于这一点Cindy Meister大神有详尽的比拟,异同点有:
相同点:
- 他们都会在操作系统的注册表中停止注册,比方关于Excel应用程序来说,会在HKCU\Software\Microsoft\Office\Excel\Addins这个下面创立注册表项,当应用程序比方Excel加载时,会逐一加载这个下面注册的插件.这些插件在COM加载项中能够停止集中管理。
- 他们都在Office Com接口上面经过Office对象模型停止构建,他们都能够将建一些可扩展的UI,比方用户自定义任务面板(Custom task panel),Ribbon菜单等。
不同点:他们也有很多不同点,主要不同点如下:
- 从名字能够看出Shared Add-In能够在多个不同的Office应用程序之间,比方Excel,Word中共享。因而在Shared Add-in中需求一些判别和处置不同宿主程序的代码。但是VSTO Add-Ins则是应用程序明白的。VSTO Add-Ins只能用在一种宿主应用程序中如Excel或者Word中运转,因而不需求在代码中处置对不同的宿主应用程序的类型做特殊的处置,比方将通用的对象转换为特定的对象,经过反射等调用不同应用程序的办法等。
- 要在Shared Add-In中创立特殊的UI界面,如Ribbon菜单,Custom Task Panel以及Form窗体等,需求完成office.dll中的三个接口:Office.IRibbonExtensibility,Office.ICustomTaskPanelConsumer及Outlook.FormRegionStartup接口。不管是创立的是以上哪品种型的UI界面,我们都需求在接口办法中编写很多处置代码。但是,假如运用Visual Studio Tools for Office,这些东西VSTO都帮我们包装好了,我们只需求从工具箱中往界面上拖动添加新的Ribbon菜单,UserControl,及FormRegion即可。这些界面在Visual Studio中都提供了设计时支持,我们只需求拖动,设置熟习,双击然后处置绑定的事情即可,就象设计Windows Form应用程序一样简单。
- 还有一个重要的区别是平安模型。关于SharedAddin的IDTExtensibility2接口来说,历来不需求代码的平安访问机制(CAS),因而,在Office加载SharedAddin的时分,不需求调用caspol.exe办法来为Addin的程序集授予完整信任的权限。在VSTO中,2008版本中运用了.NET的平安战略,但是VSTO 2008运用了ClickOne部署以及真实代码模型(Authenticode)
- VSTO为每一个VSTO Add-Ins创立了一个AppDomain,因而各个Addin之间互不影响,开发者不需求担忧一些诸如“Outlook关闭不了”的问题。当写在VSTO Addin的时分,AppDomian也会被卸载,CLR会卸载与其相关的一切资源。
- VSTO默许装置在HKCU(Current User)下面,而SharedAddin则默许部署到HKLM(Local Machine)下面。假如想让我们开发的VSTO Addin能让一切人运用,则需求在部署的时分对注册表停止一些额外的手动读写操作
SharedAddin以及VSTO开发方式在企业级应用中运用的比拟普遍,下面是一些例子:
- SQL Server Data Mining for Excel Addin
- SQL Server PowerPivot for Excel Addin
- Visual Studio Team Foundation for Excel Addin
- Oracle BI for Excel Addin
- Acrobat Reader for Excel Addin
- 还有一些国内的财经软件Excel插件,比方万得资讯的Excel插件
4 Office App
随着Office 2013 和Office 365 的推出,Office愈加注重网络化功用,因而引入了新的编程方式,那就是Apps for Office。在VS2012 中,您能够运用内置提供的Apps for Office模板创立基于Web的Office应用程序。和传统的装置插件(VSTO)及 运转宏(VBA)不同,在新版的Office中,用户能够到微软的Office App Store中去下载,装置应用程序,这些应用程序在单独平安的沙箱环境中运转。Office Apps运用熟习的Web技术开发如JavaScript,使得十分容易运用Mashup技术来聚合各种各样的资源。
下图展现的是运用在Excel中运用在线字典App来检索信息和Bing App来绘制和渲染专题图的效果。
还有一个优点是,Office App可以同时在本地的Office应用程序和Office在线应用程序中运用,比方本地的Excel 2013 和Excel Web App可以运用同一套JavaScript API来调用。更重要的是,由于是基于Web的,所以开发者能够运用本人熟习的Web开发技术如JavaScript,CSS,WebService等来开发Office App。Office App可以更便当将应用程序发布到Office App Store共享和下载,还能够经过付费赚取收益。另外关于企业及应用,能够运用企业App类别来限制只要企业内部员工才干访问下载,这些便利关于以前的Office开发方式都是不具备的。
5 XLL
XLL是Excel的一种外接应用程序,他运用C和C++开发,程序经过调用Excel暴漏的C接口来完成扩展功用。这种方式开发的应用程序效率高,但是难度大,对开发者本身的请求较高。著名的开源项目Excel-DNA就是运用XLL技术开发的,Excel-DNA可以协助.NET 开发人员来极大地简化RTD函数,同步、异步UDF函数的编写和开发。 开源软件finansu 是一款能够从Bloomberg.com, Google Finance and Yahoo! Finance财经中获取股票行情数据的软件,其中大量运用了Excel-NDA。
上图动画扼要概述了该插件功用。里面运用到了Excel-NDA中的RTD函数,异步UDF函数等功用。
XLL式的插件开发,使得系统插件不需求依赖注册表项,只需求像VBA或者VAB宏文件XLA应用那样直接在启动时加载即可运用。后面我会特地解说Excel-DNA函数的运用。
6 OpenXML SDK 及其它
另外在有些状况下,假如再用户没有装置Excel应用程序,或者在效劳器端需求动态生成Excel文件的时分。我们可能需求直接读取或者生成Excel文件,这种状况下,即便在机器上装了Excel开发环境,调研Com组件生成Excel文件可能会招致效率非常低下。由于在Office 2007版本推出了新的.xlsx这种规范的格式,在这种状况下,我们能够直接运用一些可以操作和生成Excel文件的SDK来直接停止操作。OpenXML SDK是微软官方引荐的操作Excel 07及以上文件格式的SDK,目前版本是2.0版本。假如要对Excel文件停止各种定制化开发的话,倡议运用OpenXML。另外从Java开源项目POI上移植过来的NPOI项目也能够直接读写Excel文件,这些效率都比直接调用Office的Com组件生成文档要快的多。
二 Office开发技术计划的选择
如前所述,要开发Excel应用程序,有很多计划能够选择。在作出选择之前,依据个人经历,有以下几方面需求思索:
1 应用程序的类型及功用
依据Excel插件开发的功用需求,关于以些较简单的应用,比方一些Excel模板等,能够直接采用VBA宏停止定制,假如具有.NET 根底,能够采用VSTO Document-Level的方式来开发模板;关于一些较大型的或者比拟复杂的一些应用,或者思索到效率,编写VAB可能难以完成某些功用这时能够思索采用SharedAddin或者VSTO Addin的方式来停止开发,他可以直接应用.NET平台上的各种言语及类库,并且能够运用Visual Studio这种强大的工具来开发和停止调试;假如对应用程序的跨平台,或者挪动性请求较高,或者是需求在已有的Web应用程序上树立Office应用程序,则能够思索运用Office App的方式来停止开发;假如应用程序对效率和请求较高,并且具有扎实的C或者C++根底,能够采取XLL的方式对Excel停止扩展;关于一些需求批量消费Excel文件的应用环境,比方在效劳器上消费Excel文件,导出数据到Excel,对Excel文件停止兼并分割等操作,采用OpenXML SDK、NOPI等第三方具有直接读写Excel文件的SDK来停止开发可以获取更高的效率,另外采用第三方SDK能够使得部署的目的机器不需求装置Office的可编程环境。
2 程序兼容Office的版本问题
第二个比拟重要的思索要素是应用程序的兼容版本问题。这个问题就像是开发BS应用程序需求思索应用程序的类型比方是IE还是Chrome以及版本,比方需求处置IE6 下各种头疼的问题等等。开发Excel应用程序也需求留意这一点,固然最新的Excel2013曾经推出,但是仍有大局部的客户机器可能运用的是2003 的系统。这种状况下,假如运用VSTO Application Addin的方式可能不能兼容2003的系统,并且一些特殊的UI界面如Ribbon菜单,Customer Task Panel在03版本上不兼容。这种状况下,有时分可能需求采用一些比拟通用的技术如VBA,XLL,SharedAddin技术来停止处置,另外关于一些07及以上版本中特有的UI界面和功用,运用SharedAddin开发,并且假如想应用这些功用,可能需求停止一些手动的编码和判别。另外,假如采用VSTO编程,还有一个重要的思索要素是.NET的版本问题,Excel插件通常是和其他产品绑定在一同发布或者销售的,有时分可能限定平台在.NET 2.0 上,那么选择VSTO的版本,及开发工具的时分可能就需求留意了。假如肯定目的用户运用的Office版本为比拟新的版本,如2007或者以上,倡议还是运用VSTO较高的版本停止开发,这样能够极大地简化开发的难度,进步应用程序的性能。假如客户运用的是最新版的Office,采用Office App的开发方式也是一种比拟好的选择。
三 Excel开发的将来
微软推出的这么多种Excel开发方式是为了满足不同层次用户对Excel停止定制化而推出的处理计划。在可见的将来,微软会对以上的开发方式提供持久的支持,只需满足当前应用程序的需求,目前来看对各种技术的投资仍旧是值得的。其次,最新引入的Apps for Office基于Web技术的开发方式在发布共享,装置部署,在线协作,定制化云效劳,网络聚合,本地和网络应用程序兼容方面都具有一定的优势,假如想扩展您的程序让更多的人运用,能够尝试一下Apps for Office;最后在Cindy Meister大神以为随着微软推出的新的Office Open XML 文件格式,运用OpenXML SDK能够直接操作Excel文件来创立更多的定制化功用。
四 Excel开发的资源
本文及后面的文章主要引见ShardAddin和VSTO开发,所以下面列出我所看过的觉得有用的一些资源:
1.MSDN 论坛相应的模块:
- MSDN VSTO 论坛 http://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=vsto
- MSDN Excel Programming http://social.msdn.microsoft.com/Forums/en-US/exceldev/threads
- MSDN Apps for Office http://social.msdn.microsoft.com/Forums/office/en-us/home?forum=appsforoffice
2.书籍
- VSTO开发相关书籍引荐 Visual Studio Tools for Office 2007: VSTO for Excel, Word, and Outlook
- XLL开发书籍 Financial Applications using Excel Add-in Development in C / C++
五 结语
本文主要引见了Excel开发的各种方式及其特性,并在此根底上引见了开发Excel插件技术选择时所需求思索的要素,最后给出了一些相关的开发资源。后面的文章将会重点引见SharedAddin和VSTO开发方式,这种目前企业级的开发方式可以开发出功用强大的Excel插件。后面会逐一解说Excel中的菜单系统,Excel CTP用户自定义面板,Excel对象模型,同步和异步自定义函数,RTD自动刷新函数,Excel装置与部署,Excel插件开发性能调优,Excel各版本兼容的Hack等内容,希望对大家认识和理解Excel开发有所协助。
浅谈Excel开发的方式与概述