Реализация сочетаний клавиш в MS Word Office. js надстройка - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь реализовать функцию в надстройке Word, где я отслеживаю, что пользователь печатает в MS Word, а затем выполняю автоматические c замены. Например, пользователь может набрать

:smile: :frown:

, и я автоматически заменю их на

:) :(

. Я реализовал обработчик для получения documentSelectionChanged событий, и в настоящее время я используя следующий обработчик событий:

function refLabelShortcut() {
  var range, results, par;
  Word.run(function (context) {
    range = context.document.getSelection();
    range.paragraphs.load('items');
    return context.sync()
    .then(function() {
      par = range.paragraphs.items[0];
      console.log(par.text); // THIS WORKS!
      results = par.search('the*', {matchWildCards: true});
      //results = par.search('the');
      results.load('items'); // SOMETHING WRONG HERE?
      console.log('1');
    })
    .then(context.sync)
    .then(function() {
      console.log('2a'); // DOESN'T GET TO THIS LINE :(
      console.log(results.items.length);
      console.log('2b');
    });
  });
}

Приведенный выше код работает, когда поиск не является подстановочным. Я закомментировал поиск без подстановочных знаков, чтобы вы могли видеть, что работает.

Когда вы выполняете поиск с подстановочными знаками, консоль показывает:

[text of the matching paragraph]
1

и все. Таким образом, код не доходит до последней функции then.

Есть идеи, почему это не работает с поиском по шаблону? Ошибка в строке results.load('items')

1 Ответ

1 голос
/ 30 марта 2020

Range.paragraphs - это объект коллекции, вы не можете загрузить объект коллекции, поэтому range.load('paragraphs') ничего не делает. Чтобы прочитать элементы коллекции абзацев, необходимо загрузить элементы (или какое-либо свойство объекта абзаца). Попробуйте:

range.paragraphs.load('items');

...