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 属性。其实一次可以加入多个属性,鉴于这个部分相对复杂,以后专题介绍,目前只需注意:避免加载不需要的属性

      相关文章
      |
      18天前
      |
      编解码 机器人 关系型数据库
      掌握计算机自动化:PyAutoGUI库详细教程(最全使用方法,每行代码都有注释,帮你解决与之有关的所有问题)
      掌握计算机自动化:PyAutoGUI库详细教程(最全使用方法,每行代码都有注释,帮你解决与之有关的所有问题)
      |
      2月前
      |
      自然语言处理 算法 Java
      基于Python第三方插件实现西游记章节标注汉语拼音
      基于Python第三方插件实现西游记章节标注汉语拼音
      26 0
      |
      11月前
      |
      JSON 自然语言处理 JavaScript
      go 语言实战入门案例之命令行排版词典
      go 语言实战入门案例之命令行排版词典
      54 0
      |
      前端开发
      #yyds干货盘点 【React工作记录十五】关于ant design中input限制加空格的问题
      #yyds干货盘点 【React工作记录十五】关于ant design中input限制加空格的问题
      172 0
      #yyds干货盘点 【React工作记录十五】关于ant design中input限制加空格的问题
      |
      存储 自然语言处理 算法
      Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)
      其实很早以前就想搞一套完备的标签云架构了,迫于没有时间(其实就是懒),一直就没有弄出来完整的代码,说到底标签对于网站来说还是很重要的,它能够对一件事物产生标志性描述,通常都会采用相关性很强的关键字,这样不仅便于检索和分类,同时对网站的内链体系也是有促进作用的。
      Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合)
      |
      前端开发
      #yyds干货盘点 【React工作记录八】如何限制ant design的input只能输入数字
      #yyds干货盘点 【React工作记录八】如何限制ant design的input只能输入数字
      497 0
      |
      机器学习/深度学习 Shell Python
      [oeasy]python0022_框架标题的制作_banner_结尾字符串_end
      [oeasy]python0022_框架标题的制作_banner_结尾字符串_end
      93 0
      [oeasy]python0022_框架标题的制作_banner_结尾字符串_end
      |
      算法 数据挖掘 C++
      Github13K!相似搜索百宝箱,文本匹配入门必备!
      Github13K!相似搜索百宝箱,文本匹配入门必备!
      Github13K!相似搜索百宝箱,文本匹配入门必备!
      |
      机器学习/深度学习 自然语言处理 算法
      超赞的 PyTorch 资源大列表,有人把它翻译成了中文版!
      超赞的 PyTorch 资源大列表,有人把它翻译成了中文版!
      191 0
      超赞的 PyTorch 资源大列表,有人把它翻译成了中文版!
      |
      API
      Script Lab 08:单词“卡拉OK”,Word 基础操作
      Script Lab 08:单词“卡拉OK”,Word 基础操作
      224 0
      Script Lab 08:单词“卡拉OK”,Word 基础操作