Script Lab 08:单词“卡拉OK”,Word 基础操作

简介: Script Lab 08:单词“卡拉OK”,Word 基础操作

准备工作

今天开始做一个 Word 的例子。基础部分是相同的,区别仅仅在于 Word API 的部分。还记得第一次我们代码的第一行从 Excel.run 开始,这里相应要换成 Word.run 。其它部分均是相同的,包括所有的引用,区别只在 Word 对像本身了。

本次示例的代码是将一个段落拆分为单词范围,然后遍历所有范围以格式化每个单词,从而产生“卡拉OK”效果。以下是源码地址(如果无法打开,请参考前期06的技巧提示部分):

https://gist.github.com/JuaneloJuanelo/92d7b4978e3487fc593a39a7a8128a30


运行效果

image.png

代码

【代码解析】

取得段落:

let paragraph = context.document.body.paragraphs.getFirst;

拆分单词:

let words = paragraph.split([" "], true , true);

改变颜色:

words.items[i - 1].font.highlightColor = "#FFFFFF";

words.items[i].font.highlightColor = "#FFFF00";

延时效果:

await pause(200);

【全部代码】


$("#setup").click( => tryCatch(setup));
$("#highlight").click( => tryCatch(highlightWords));
async function highlightWords 
{ 
 await Word.run(async (context) => 
 { 
 let paragraph = context.document.body.paragraphs.getFirst; 
 let words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); 
 words.load("text"); 
 await context.sync; 
 for (let i = 0; i < words.items.length; i++) 
 { 
 if (i >= 1) 
 { 
 words.items[i - 1].font.highlightColor = "#FFFFFF"; 
 } 
 words.items[i].font.highlightColor = "#FFFF00"; 
 await context.sync; 
 await pause(200); 
 } 
 });
}
function pause(milliseconds) 
{ 
 return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
async function setup 
{ 
 await Word.run(async (context) => 
 { 
 context.document.body.clear; 
 context.document.body.insertParagraph( "Video provides a powerful way to help you prove your point. When you click Online Video, you can paste in the embed code for the video you want to add. You can also type a keyword to search online for the video that best fits your document.", "Start" );
 context.document.body.paragraphs .getLast .insertText( "To make your document look professionally produced, Word provides header, footer, cover page, and text box designs that complement each other. For example, you can add a matching Online cover page, header, and sidebar. Click Insert and then choose the Online elements you want from the different Online galleries.", "Replace" ); 
 await context.sync; });
}
async function tryCatch(callback) 
{ 
 try 
 { 
 await callback; 
 } catch (error) 
 { 
 OfficeHelpers.UI.notify(error); 
 OfficeHelpers.Utilities.log(error); 
 }
}

【代码图示】

image.png

后记

有一段非常重要的代码,前面没有提到:

words.load("text");


这里是与 VBA/VSTO 不同的地方。我们先来看一下,如有注释掉这句代码会怎么样?

PropertyNotLoaded: 属性“items”不可用。读取属性的值之前,请先对包含对象调用 load 方法,再对关联的请求上下文调用 "context.sync"。


对于读回 Word 数据,所有的对象都有一个特殊命令 object.load(properties) 。而其中的 “text” 正是 word 对象下的 text 属性。其实一次可以加入多个属性,鉴于这个部分相对复杂,以后专题介绍,目前只需注意:避免加载不需要的属性

相关文章
|
测试技术
华为测试工程师面试必备的问题点
华为测试工程师面试必备的问题点
327 0
如何将DataGridView中的滚动条显示出来
1、选项设置   DataGridView有一个ScrollBars,可以设置水平滚动条,垂直滚动条,或者两种包含。   2、实际运行效果
5800 0
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
239 2
|
数据采集 人工智能 自然语言处理
SAS对生成式AI前景分析问题之SAS Viya Copilots的定义如何解决
SAS对生成式AI前景分析问题之SAS Viya Copilots的定义如何解决
122 0
|
Linux Windows
Windows文件直接上传到Linux
Windows文件直接上传到Linux
239 0
|
存储 SQL 运维
《2021 阿里云可观测技术峰会演讲实录合辑(上)》——三、友邦人寿可观测体系设计与落地
《2021 阿里云可观测技术峰会演讲实录合辑(上)》——三、友邦人寿可观测体系设计与落地
230 0
|
SQL 分布式计算 Cloud Native
独家下载|《阿里云MaxCompute百问百答》 解锁SaaS模式云数据仓库尽在本电子手册!
为了帮助MaxCompute用户更顺畅的使用产品,阿里云MaxCompute团队基于开发者社区和其他渠道总结归纳出相关功能点的常见问题,联合阿里云开发者社区共同打造了《阿里云MaxCompute百问百答》电子手册,希望可以给正在学习和使用MaxCompute产品的用户提供一些帮助
12281 2
独家下载|《阿里云MaxCompute百问百答》 解锁SaaS模式云数据仓库尽在本电子手册!
|
监控 IDE 程序员
阿里研究员:缩短软件开发中的反馈弧
开发者写好了某个功能的代码,想知道这个功能是不是实现了,代码还需不需要再改,这就是一种反馈。在软件开发中,尤其是联调时,缩短反馈弧有助于及时发现问题、采取对策,提高开发效率。那么什么样的反馈弧才算短?如何看待缩短反馈弧的投入产出比?本文分享阿里巴巴研究员南门对软件开发中反馈弧的相关思考和看法。
阿里研究员:缩短软件开发中的反馈弧
|
Android开发
Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸
Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸 实验方法,先找一张不规则大图,尺寸:1024pix(宽) X  1465pix(高),原图如图:然后特意设置一个ImageView宽高均为600pix。
2315 0