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

      相关文章
      |
      消息中间件 存储 分布式计算
      【Flume】Flume配置文件详细分析
      【4月更文挑战第4天】【Flume】Flume配置文件详细分析
      |
      JavaScript API
      【vue实战项目】通用管理系统:api封装、404页
      【vue实战项目】通用管理系统:api封装、404页
      133 3
      |
      NoSQL 安全 Linux
      【Redis入门】在阿里云上快速安装 Redis
      如果你最近打算学习 redis 并且买了阿里云的 Linux 服务器,那么借助阿里云服务器和宝塔Linux面板,只需要简单几步就可以安装好 redis。
      1269 0
      【Redis入门】在阿里云上快速安装 Redis
      |
      9月前
      |
      JSON 算法 vr&ar
      目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
      本文介绍了如何使用COCO评估器通过Detectron2库对目标检测模型进行性能评估,生成coco_instances_results.json文件,并利用pycocotools解析该文件以计算AP、AR、MR和DR等关键指标。
      583 1
      目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
      |
      11月前
      |
      运维 图形学 Python
      从零开始的PICO教程(2)--实时预览应用场景
      这篇文章是关于如何使用PICO Unity Live Preview Plugin在PICO设备上进行实时预览应用场景的教程,包括准备工作、操作步骤和故障排查方法。
      |
      JavaScript 前端开发 开发者
      理解Vue实例:生命周期钩子全面解析
      【4月更文挑战第22天】Vue.js 框架的核心概念之一是 Vue 实例及其生命周期钩子,包括创建、挂载、更新和销毁四个阶段。这些钩子函数如 `beforeCreate`、`created`、`mounted`、`updated`、`beforeDestroy` 和 `destroyed`,在实例不同阶段调用,使开发者能精确控制应用状态。了解其执行顺序和应用场景(如初始化、DOM 操作、数据更新和资源清理)对于编写高效 Vue 代码至关重要。
      176 2
      |
      算法
      AcWing刷题(第二周)(链表,单调栈等......)
      AcWing刷题(第二周)(链表,单调栈等......)
      110 0
      |
      存储 API 持续交付
      virsh 的工作原理
      `virsh`是基于libvirt API的命令行虚拟机管理工具,适用于自动化部署和管理。它提供交互和非交互模式,用于连接到Hypervisor,执行如创建、管理、配置虚拟机及网络、存储等任务。用户需相应权限,无权限者只能读取信息。virsh通过与libvirtd守护进程通信,实现对虚拟化环境的控制,是系统管理员的强大助手。
      278 2
      |
      机器学习/深度学习 人工智能 自然语言处理
      CVPR 2022 | 视频Transformer自监督预训练新范式,复旦、微软云AI实现视频识别新SOTA
      CVPR 2022 | 视频Transformer自监督预训练新范式,复旦、微软云AI实现视频识别新SOTA
      385 0
      |
      数据安全/隐私保护 iOS开发 MacOS
      CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果(2)
      CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果
      205 0