BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

在Microsoft Word中,Node是如何替代宏的

| 作者 Jonathan Allen 关注 594 他的粉丝 ,译者 张卫滨 关注 13 他的粉丝 发布于 2016年4月6日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

最近的30年来,宏(macros)成为了Microsoft Word的关键卖点。WordBASIC最初是在1989年引入的,它能够让受过极少培训的打字员都能进行计算机编程,从而简化他们的日常工作。

在那个时代,竞争非常激烈。除了Word,还有WordStar和后来居上的WordPerfect,它们都有自己的宏编程语言。随着竞争的持续,业务用户的需求越来越多,更新也变得非常频繁。

在上世纪90年代末期,发生了一些有意思的事情。Microsoft创建了Visual Basic for Applications(VBA),这个语言具有(有限的)OOP能力以及与其相匹配的IDE,用以替代WordBASIC,它所创建的并不仅仅是另外一个嵌入式组件。最初的时候,Microsoft预期将这项技术用在所有的MS Office产品之中,随后他们意识到可以对这项技术进行许可认证。很快,众多的公司都提供了对VBA的支持,包括ArcGISAutoCADSolidWorksCorelDraw,甚至还有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演示。

查看英文原文:How Node Replaced Macros in Microsoft Word

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT