在Microsoft Word中,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演示。

\\

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

igs无法分配驱动器映射表_硬盘无法使用,用DiskPart进行分区和格式化,非常简单...

如果计算机硬盘出现问题,有时不是硬件上出现了错误,很可能只是逻辑上出现了问题,这时就可以使用DiskPart来快速解决。在Windows 10上,当外部存储(例如U盘、可移动硬盘或SD卡)由于数据损坏或其他问题而停止工作时,可以使…

java随机生成1到33数组,JAVA 生成随机数数组

一、JAVA获取随机数的方法//使用java.lang.Math类的random()方法double a Math.random();System.out.println("0.0-1.0的随机数:" a);double b Math.random()*100;System.out.println("0.0-100.0的随机数:" b);int c (int)(Mat…

线性筛法求素数

求素数是比较基本的内容,有时候我们会需要打一个素数表。一般如果n比较小我们会使用(%2~sqrtn)这种算法,简单但是时间耗费很多,复杂度是O(n^2)。这里介绍一种筛选求素数法,基本要点是,如果找到一…

硬件nat关闭还是开启_超能课堂(173):AfterBurner不止超频,还是绝佳的游戏伴侣...

微星AfterBurner软件可以说是一个相当好用的显卡工具,它好用的超频功能估计都不用我多说了吧?微星并没有把这款软件限制在自己品牌的显卡能用,各个品牌的显卡都能用,无论A卡还是N卡都可以用AfterBurner来超频,软件在超…

java dataset redis,利用Spring-Data-Redis和Jedis操作Redis缓存

概述 Jedis是redis官方推荐的用于访问Java客户端,在https://github.com/xetorthio/jedis下载最新的jedis。 访问redis 1、访问简单的key——value, pu只需简单几步,就可以利用Spring-Data-Redis和Jedis操作Redis缓存。步骤如下&…

javascript Array学习与使用

一.Javascript数组是无类型的;数组元素可以任意类型,并且同一个数组中的不同元素也可能有不同的类型,javascript数组是动态的,会根据需要增长或者缩减,每一个数组都有一个length属性。它不是只读的&#xf…

mx350显卡天梯图_CPU天梯图与显卡天梯图2020年最新版

最新CPU天梯图较之以往没有太大的变化,前十位置还是那几款。但是继阿里之后,腾讯也开始准备自己制作芯片了,毕竟自研AI芯片的诱惑还是很大的,2020年有不少的厂商都推出了新鲜美味的显卡,有些是老卡翻新做性价比。有的则…

matlab写字,Matlab实现鼠标写字代码

类型:编程工具大小:1.5M语言:中文 评分:1.2标签:立即下载最早的程序,实在忘了从哪里下载的了。能够实现鼠标的手写输入,但是一些不连续的点。tmouse.mfunction tmouse(action)% TMOUSE 本例展示…

[Linux]变量加减赋值以及将String转int

teddytoshiba~$ a"76"teddytoshiba~$ echo $((a3))79teddytoshiba~$ echo $((a-12))64teddytoshiba~$取文件名以及文件路径的脚本:#!/bin/shtmp$1filenameecho $1 | awk -F/ {print $(NF)}echo "filename":$filenamefilenamelengthecho | awk …

matlab在绘图时分数,第三章_Matlab图形绘制试卷.ppt

2、griddata函数,用来产生经插值后均匀间隔数据作图。常用的调用方法是:[XI,YI,ZI] griddata(x,y,z,XI,YI,’method’),其中x,y,z来自关系式zf(x,y),也可以是离散的数据点,ZI是有XI和YI插值后得到的对应点。其中metho…

from rfc 2068 hypertext怎么解决_你好,打工人!用英语怎么表达“打工人”?可别直接说 worker...

打工人,打工魂,打工人是人上人!最近,「打工人」这个词火了!几乎一夜之间,很多人在和朋友打招呼时,都自称“打工人”。那“打工人”是什么意思?这里的“打工人”,其实是对…

fbset

fbset用于读取和设置framebuffer的参数。# fbset mode "800x480-112"# D: 64.998 MHz, H: 58.034 kHz, V: 112.035 Hzgeometry 800 480 800 480 16timings 15385 220 40 21 7 60 10accel falsergba 5/11,6/5,5/0,0/0 endmode

mysql中更新的命令是,mysql命令总结(陆续更新中)

批量mysql 数据导入 load data local infile xx into table xx;连接数据库:mysql -h hostname -P port -u username -p -D databasename查看提供什么存储引擎:show engines;查看当前引擎:show variables like %storage_engine%;查看表使用了…

STM32连续采样_STM32 - 利用双缓冲实现实时曲线显示(续)

前言大概半个月之前捣鼓了下利用STM32实现实时曲线显示&#xff0c;中间又做了一点小改进和扩充&#xff0c;在这里更新一下&#xff1a;利用DMA进行缓冲区到LCD GRAM的像素数据搬运效果更好的曲线绘制策略代码可以在这里找到&#xff1a;<写得比较乱&#xff0c;望谅解( &a…

Vmware虚拟机三种网络模式详解

原文来自http://note.youdao.com/share/web/file.html?id236896997b6ffbaa8e0d92eacd13abbf&typenote 我怕链接会失效&#xff0c;故转载此篇文章。通过这篇文章&#xff0c;我对之前疑惑的地方有了直观的理解&#xff0c;很多地方并没有自己动手实践&#xff0c;所以这篇…

ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...

模块对应cabin_controllers/serial_to_mcu。模块实现的功能为监听网络中PWM矩阵信息&#xff0c;将其转换成十六进制数据通过串口下发至MCU&#xff0c;实现对推进器电机的控制。模块数据的串口通信借助了ros的serial工具包&#xff08;sudo apt-get install ros-melodic-seria…

2018php项目实战视频教程,2018PHP实战技术VIP在线学习视频课程

课程目录&#xff1a;1-1 疯狂讲义之web简介2-1 从搭建PHP开发环境开始2-2 第一个PHP程序2-3 PHP变量相关知识2-4 PHP数据类型2-5 PHP数据类型之进制转换2-6 PHP数据类型之浮点型2-7 PHP数据类型系统函数简介3-1 PHP数据类型字符串的声明与定义3-2 数据类型之数组、资源、null类…

Struts1.x在MyEclipse中的环境搭建和配置

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;一&#xff09; 先解压Struts-1.3.10-all.zip的文件夹Struts-1.3.10-all备用 -> 打开MyEclipse -> 新建一个 web project -> 在工程名上按右键鼠标选 Properties -> 弹出 Properties 面板 …

iphone固件降级_iPhone无法开机怎么办?三种快速维修方法

苹果手机的流畅让许多用户为之买单&#xff0c;但毕竟是电子产品&#xff0c;难免会有一些故障&#xff0c;其中无法开机就是一个很头疼的问题&#xff0c;一方面担心手机报废&#xff0c;一方面担心修理费过高&#xff0c;而造成 iPhone 无法开机的原因有很多&#xff0c;这里…

strspn函数php,php strspn函数怎么用?

strspn()函数是PHP中的一个内置函数&#xff0c;语法为strspn(string,charlist,start,length)&#xff0c;用于返回在字符串中包含 charlist 参数中指定字符的数目。php strspn()函数怎么用&#xff1f;strspn() 函数返回在字符串中包含 charlist 参数中指定的字符数目。语法&a…