@levinzhang
2016-04-04T18:17:34.000000Z
字数 2281
阅读 536
by Jonathan Allen on Apr 01, 2016
过去,为Word编写扩展通常会用BASIC来进行处理。现在,它所选择的语言变成了JavaScript和Node平台。
最近的30年来,宏(macros)成为了Microsoft Word的关键卖点。WordBASIC最初是在1989年引入的,它能够让受过极少培训的打字员都能进行计算机编程,从而简化他们的日常工作。
在那个时代,竞争非常激烈。除了Word,还有WordStar和后来居上的WordPerfect,它们都有自己的宏编程语言。随着竞争的持续,业务用户的需求越来越多,更新也变得非常频繁。
在上世纪90年代末期,发生了一些有意思的事情。Microsoft创建了Visual Basic for Applications(VBA),这个语言具有(有限的)OOP能力以及与其相匹配的IDE,用以替代WordBASIC,它所创建的并不仅仅是另外一个嵌入式组件。最初的时候,Microsoft预期将这项技术用在所有的MS Office产品之中,随后他们意识到可以对这项技术进行许可认证。很快,众多的公司都提供了对VBA的支持,包括ArcGIS、AutoCAD、SolidWorks、CorelDraw,甚至还有WordPerfect。
在世纪之交不久,人们就看到了宏的大幅下滑。所谓的“宏病毒”造成了严重的破坏。因为它们隐藏在Word文档中,所以病毒扫描器很难发现它们。
作为回应,Microsoft锁定了VBA编程接口。它依然很强大,但是关闭了安全功能,所以使用它实际上很有挑战性。大多数的病毒扫描器会拒绝所有通过email共享的带有宏的文档。
尽管它处于下滑的状态之中,Visual Basic for Applications依然还是存在的。最新的7.1版本是在2013年发布的,并且从2010年开始它就有64位版本了。但是随着基于Web的字处理器变得越来越流行,VBA也似乎走入了死胡同。它基于上世纪90年代的COM技术,并没有可行的方案将其放到Web应用中。随着人们逐渐将语言从BASIC替换为JavaScript,再创建一个“Web版本的VBA”显得就有点不合时宜了。
.NET与Office
为了让人们放弃过时的VBA技术,Microsoft还创建过Visual Studio Tools for Office(VSTO)。这个开发工具集和库不仅能够创建Office插件,还允许独立的应用操纵Office文档。
至少在理论上是这样的。但实际上,在这两方面VSTO都失败了。
普通的程序员并不想要安装Visual Studio并从头开始创建Office插件。他们想要录制一个宏,然后对其修改以满足他们的需求。培训学习的成本从“编辑直到可用为止”变成了完全从头开始,这是难以承受的。
另外,还有版本的问题。VBA风格的宏会存储为纯文本,这意味着只要你不使用只有新版本才有的特性的话,你所编写的代码能够用到任意版本的Office之中。而编写VSTO插件时,你需要针对特定的Office版本进行编程。这意味着开发人员只能使用公司中最老的版本。
另一方面,专业的开发人员对插件基本上没有太大的兴趣。他们希望构建使用和/或生成文档的服务器。VSTO基于COM的自动化,这意味着在做实际的工作之前,首先要有Word或Excel的一个副本。对于Web站点的每个用户,都要运行一个重量级桌面应用的副本,这种做法显然是站不住脚的。
与VBA类似,我们实际上无法在基于浏览器的Web处理器上使用VSTO。
使用Node构建Office的Add-In
如我们前文所述,JavaScript现在已经成了通用的编程语言。业余爱好者(以及类似的专业开发人员)不想要或不喜欢重量级的IDE,如Eclipse或Visual Studio,于是Node变成了他们的开发平台。所以,Microsoft选择这些工具来构建Office add-in,我们也不应该感到意外。
首先,我们需要安装Node。然后从命令行中,运行下面的两条命令:
npm install -g tsd bower gulp yo generator-office
yo office
yeoman generator会询问我们想要构建哪种类型的add-in(ribbon command、 task pane等)、支持哪些Office产品以及想要使用Angular还是纯HTML/JavaScript进行构建。接下来需要执行的命令就是搭建本地的服务器,用来托管你的add-in。
gulp serve-static
这是用于基本的冒烟测试的,对于实际环境来说,你需要在Web上运行Office。在打开一个空文档之后,可以上传add-in的manifest,然后查看它的实际效果。
你可能会问,既然要上传manifest,为什么还要启动本地服务器呢?这是因为manifest在你的电脑同时运行Office的时候,它就允许浏览器从电脑上加载add-in。在实践中,这意味着你可以修改add-in,点击浏览器的刷新按钮,就能马上看到实际的效果,不需要在每次变化之后都重新上传add-in。
因为这是一个Web应用,所以可以使用浏览器内置的调试工具进行调试。
要看实际效果的话,可以观看Harrison Shapley的Build Office Add-ins with Any Code Editor and Office Online演示。