Добавить / удалить выделение слов в документе MS Office Word OfficeJS - PullRequest
0 голосов
/ 05 декабря 2018

Мне нужно выделить слова в документе Word в моей надстройке, и когда пользователю нужно удалить выделение, созданное надстройкой, должна быть возможность удалить только выделение, созданное надстройкой.Созданные пользователем блики не должны быть удалены.

Сейчас я могу выделить слова красным цветом в моей надстройке, и когда пользователь хочет удалить блики, даже пользовательские блики также удаляются.

Ниже мой код:

//Add highlights
return context.sync().then(function () {
// Queue a set of commands to change the font for each found item.
for (var i = 0; i < searchResults.items.length; i++) {
    searchResults.items[i].font.color = 'red';
    searchResults.items[i].font.underline = 'wave';
}
return context.sync();
});

//Remove highlights
Word.run(function (context) {
            // Create a proxy object for the document body.
            var body = context.document.body;

            // Queue a commmand to clear the contents of the body.
            body.load("font");

            return context.sync().then(function () {
                // Queue a set of commands to change the font for each found item.
                body.font.color = 'black';
                body.font.underline = 'None';
                return context.sync();
            })
                .catch(errorHandler);
        });

1 Ответ

0 голосов
/ 05 декабря 2018

у вас есть несколько вариантов для этого.

  1. Вы можете сохранить диапазоны, где вы сделали блики.
  2. Вы можете обернуть результаты диапазона с невидимым контролем содержимого (как подсказывает Синди в своем комментарии), создайте тег, а затем просмотрите эти элементы управления содержимым (используя элементы управления содержимым, используя метод тега), чтобы отформатировать ваши основные моменты (и удалить элементы управления содержимым.

2)из простых для реализации:)

Для 1) пожалуйста, посмотрите на следующий пример, он не делает именно то, что вам нужно, но вы можете получить представление о том, как этого добиться.Цель состоит в том, чтобы сохранить каждый диапазон с помощью метода treackedObjects, который является самым важным битом.В этом случае я создаю массив диапазонов, которые были найдены, а затем вы можете использовать его для очистки ваших бликов.пожалуйста, не забудьте вызвать context.trackedObjects.remove, так как вы выделяете память для временного хранения этих объектов.Кстати, в моем примере убедитесь, что вы включили комбо-код с идентификатором "FoundRanges"

, вот фрагмент сценария сценария лаборатории , который вы можете использовать.

function loadCombo() {
    Word.run(function (context) {
        var rangesAr = [];
        var currentlySelectedIndex = 0;
        var myRanges = context.document.body.search("Word");
        context.load(myRanges, { expand: 'font' });
        return context.sync()

            .then(function () {
                var myCombo = document.getElementById("FoundRanges");

                for (var i = 0; i < myRanges.items.length; i++) {
                    var myItem = document.createElement("option");
                    myItem.text = myRanges.items[i].text
                    myCombo.add(myItem);
                    var newRange = myRanges.items[i].getRange();
                    rangesAr.push(newRange);
                    context.trackedObjects.add(newRange);
                   
                }
                $('#FoundRanges').change(function () {
                    
                    rangesAr[this.selectedIndex].font.bold = true;
                    currentlySelectedIndex = this.selectedIndex;
                    return context.sync()
                        .catch(function (e) {
                           console.og(e.message);
                        })
                });
                return context.sync()
            })
            
    }).catch(function (e) {
        console.log(e.message)
    })
}
...