最近的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演示。

\\

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

在Microsoft Word中,Node是如何替代宏的相关推荐

  1. word 图片导入不翻转_如何在Microsoft Word中翻转图片

    word 图片导入不翻转 While Microsoft Word isn't known for its photo-editing abilities, it does have some bas ...

  2. Microsoft Word中编辑Visio图形的方法

    本文主要介绍在 Microsoft Word 中编辑 Visio 图形的具体方法. 在 Word 中修改 Visio 图形时,经常遇到双击 Visio 图形后,Visio 内容太小不便于修改的情况,而 ...

  3. 微软输入法的m图标怎么设置_如何在Microsoft Word中获取“ L”形的格式设置图标?...

    微软输入法的m图标怎么设置 Each of us has a preferred layout and setup when we are working with Microsoft Word, b ...

  4. Microsoft Word中自动编号有参考文献识别不到的问题

    Microsoft Word中自动编号有参考文献识别不到的问题 问题描述 原因 解决方案 问题描述 如下图所示,在给图中3条参考文献自动编号时,第2条文献识别有误,未进行编号. 原因 第2条文献中第一 ...

  5. java 合并和拆分单元格_如何在Microsoft Word中合并和拆分表和单元格

    java 合并和拆分单元格 You can easily merge and split cells in Microsoft Word to make your tables more intere ...

  6. word中画网格立方体_如何在Microsoft Word中制作点网格纸模板

    word中画网格立方体 From bulleted journals for personal planning, to graph paper for designing complex mathe ...

  7. 如何从Microsoft Word中的图片中删除背景

    Every so often, you might want to remove the background from an image in your Word document, leaving ...

  8. 微软word开机自启动_如何在Microsoft Word中创建自定义封面

    微软word开机自启动 A great cover page draws in readers. If you use Microsoft Word, you're in luck, because ...

  9. 如何在Microsoft Word中插入PDF文档?

    文章来源:https://www.reneelab.com.cn/how-to-insert-pdf-into-word.html 目录 一.在Windows上将PDF插入到Word文档的方法 方法一 ...

  10. 如何在Microsoft Word中添加一个悬挂缩进

    A hanging indent is used to position the first line of each paragraph against the margin, with each ...

最新文章

  1. UWP 显示图片到Image控件
  2. ASP.NET Core 2.0 : 图说管道,唐僧扫塔的故事
  3. 【转载保存】索引文件锁LockFactory
  4. 手机站的view.php,织梦网站文章内容页动态地址plus/view.php路径修改
  5. Java BigInteger类| bitCount()方法与示例
  6. java如何快速抛出异常,异常 - 如何抛出异常 - 《Java 编程要点(Essential Java)》 - 书栈网 · BookStack...
  7. 取 java 程序运行的路径_获取Java程序运行的路径 | 获取当前jar包的路径
  8. Quartus 与modelSim联合仿真常见错误以及系统任务$readmemb和$readmemh解释
  9. python中布尔变量的值为_python 布尔操作实现代码 python是如何定义并使用变量的...
  10. 字符编码(1)——Unicode,utf-8
  11. Linux---字符设备驱动程序设计
  12. 直接插入排序和冒泡排序有什么区别 直接插入排序和冒泡排序有哪些不同
  13. 使用putty进行Linux串口连接
  14. Maui Shell 来了,开启 Linux 桌面新时代!
  15. 浪潮服务器如何安装win7系统,WIN7旗舰版操作系统中浪潮ERP-GS5.2安装说明.doc
  16. iconfont多色图标的使用方法
  17. [渝粤教育] 天水师范学院 地质与地貌学 参考 资料
  18. 林氏物语.朝花夕拾之恨逢卿晚
  19. IDEA安装vue开发插件
  20. 64位系统和32位系统的区别

热门文章

  1. .NET Entity Framework入门简介及简单操作
  2. 生成QR二维码的多种方法
  3. RAC 实例 迁移到 单实例 -- 使用导出导入
  4. Redis的应用场景及优缺点
  5. 你需要知道的requestAnimationFrame
  6. Linux 常用命令操作
  7. linux里与Ctrl组合使用的键
  8. 【第二篇】Volley的使用之加载图片
  9. Postfix邮件设定相关
  10. 一个QQ多用户登陆的实例代码