Я пытаюсь установить стили всех выбранных абзацев из надстройки JavaScript. Код отлично работает в Word Online, но я получаю сообщение об ошибке, когда использую его в Word Desktop. Код выглядит следующим образом (да, мой тестовый стиль называется «Банан», и он большой и желтый):
function updateParStyle(event) {
Word.run(function (context) {
var range = context.document.getSelection();
range.load("paragraphs/items");
return context.sync().then(function () {
var items = range.paragraphs.items;
// console.log(items.length + " items");
for (var i = 0; i < items.length; i++) {
items[i].style = "Banana";
}
return context.sync();
});
}).catch(function (e) {
console.error(e);
return window.open("https://urldecode.org/?text=" + JSON.stringify(e));
});
event.completed();
}
В настольном Word я получаю следующую ошибку:
{
"name":"OfficeExtension.Error",
"code":"ItemNotFound",
"message":"ItemNotFound",
"traceMessages":[],
"debugInfo":{
"errorLocation":"ParagraphCollection.getItem"
},
"stack":"ItemNotFound: ItemNotFound\n at Anonymous function (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8103:6)\n at lib$es6$promise$$internal$$tryCatch (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8974:8)\n at lib$es6$promise$$internal$$invokeCallback (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8984:8)\n at lib$es6$promise$$internal$$publish (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8960:9)\n at lib$es6$promise$asap$$flush (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8779:8)"
}
Отладка выявила, что ошибка возникает в context.sync
после установки стилей абзаца. Как видно из сообщения об ошибке, я использую unminified office.js для отладки, но ошибка также возникает с office.js по умолчанию, только с менее полезной трассировкой стека. Если я установлю range.style = "Banana"
вместо работы с абзацами, это будет работать как в Word Online, так и в Word Desktop. Стиль «Банан» - это связанный стиль (поэтому он должен работать как для абзацев, так и для символов).
Я получаю ту же ошибку при замене items[i].style = "Banana"
на items[i].delete()
или items[i].insertText("Hello world", "After")
, поэтому проблема не связана с самим стилем.
Возможный обходной путь, который я нашел, заключается в том, что я могу установить стиль абзаца в выбранном диапазоне, и он будет работать так, как ожидалось (установить стиль всех выбранных абзацев, даже тех, которые частично выделены), но я полагаю, что я ' В какой-то момент мне придется поработать с ParagraphCollection
, поэтому я все равно хотел бы знать, что я делаю не так.
Я тестировал Word версии 16.0.7341.2035 и 16.0.7167.2060.