MS word Office.js加载项中的实现键盘快捷键

问题描述 投票:0回答:1

我正在尝试在Word加载项中实现一项功能,该功能可以跟踪用户在MS Word中键入的内容,然后执行自动替换。例如,用户可以输入

:smile: :frown:

并且我会自动将其替换为

:) :(

我已经实现了一个处理程序来接收documentSelectionChanged事件,并且我目前正在使用以下事件处理程序:

function eventHandler() {
  var range, results;
  Word.run(function (context) {
    range = context.document.getSelection();
    range.load('paragraphs');
    return context.sync().then(function() {
      var par = range.paragraphs.items[0];
      console.log(par.text);
      //results = par.search(':smile:');
      results = par.search(':*:', {matchWildCards: true});
      context.load(results);
      return context.sync().then(function() { # ERROR HERE
        console.log(results.items.length);
      });
    });
  });
}

使用此代码,每次用户键入一个字符,我都可以获取当前段落的文本。您可以在上面看到我将其编写为控制台,并且该部分有效。

之后的代码在我不进行通配符搜索时有效(该行在上面被注释掉了,但是当我进行通配符搜索时,出现了错误:

未处理的承诺拒绝:RichApi.Error:发生内部错误。 (word-mac-16.00.js 13716)

知道为什么通配符搜索不起作用?


我根据在SO上看到的一些答案尝试了另一个变体:

function eventHandler2() {
  var range, results, par;
  Word.run(function (context) {
    range = context.document.getSelection();
    range.load('paragraphs');
    return context.sync()
    .then(function() {
      par = range.paragraphs.items[0];
      console.log(par.text);
      results = par.search(':*:', {matchWildCards: true});
      context.load(results);
      results.load('text');
    })
    .then(context.sync())
    .then(function() {
      console.log(JSON.stringify(results));
    });
  });
}

使用此版本,我不再遇到任何错误,但是消息中没有results.items

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

似乎我已经做了这些事情,但无济于事。 :(

ms-word office-js
1个回答
0
投票

Range.paragraphs是一个收集对象,您无法加载收集对象,因此range.load('paragraphs')不会执行任何操作。为了读取段落集合的项目,您必须加载项目(或段落对象的某些属性)。试试:

range.paragraphs.load('items');

© www.soinside.com 2019 - 2024. All rights reserved.