Word Addin: Как найти заголовок и вставить туда текст?
Как составить список заголовков (заголовок 1, заголовок 2 и т. Д.), Найти конкретный (по имени) и вставить туда абзац? Это выполнимо в новом Word JS API?
Обновление Спасибо, Рик! Вставляем здесь код, который делает свое дело:
await Word.run(async (context) => {
try {
let paragraphs = context.document.body.paragraphs;
context.load(paragraphs, ['items']);
// Synchronize the document state by executing the queued commands
await context.sync();
let listItems: HeroListItem[] = [];
for (let i = 0; i < paragraphs.items.length; ++i) {
let item = paragraphs.items[i];
context.load(item, ['text', 'style', 'styleBuiltIn']);
// Synchronize the document state by executing the queued commands
await context.sync();
if (item.style === 'Heading 1' || item.style === 'Heading 2') {
listItems.push({
primaryText: item.text + ' (' + item.style + ')'
});
if (item.text === 'Late days') {
let newLineItem = item.getNextOrNullObject();
context.load(item, ['text', 'style', 'styleBuiltIn']);
newLineItem.insertParagraph('<<<<<<<<<<<<<<My inserted text>>>>>>>>>>>>>>', 'After');
}
}
}
this.setState({listItems: listItems});
} catch (error) {
this.setState({listItems: [{primaryText: 'error:' + error}]});
}
});
1 ответ
Я предполагаю, что когда вы говорите "имя", вы имеете в виду текст заголовка. Это можно сделать. Ваш код должен загрузить все параграфы. Итерируйте их и используйте свойство style или styleBuiltIn, чтобы найти те, имена стилей которых начинаются с "Заголовок". Затем переберите тех, кто просматривает свойство text, чтобы найти то, что вам нужно. Затем используйте insertParagraph
способ вставить новый абзац.
ОБНОВЛЕНИЕ: (отвечая на вопрос ОП ниже): Вы всегда должны минимизировать вызовы context.sync
, поэтому вы должны стараться не вызывать его в цикле. Попробуйте использовать цикл for, чтобы добавить каждый абзац в массив, а затем context.load
массив и сделать context.sync
, Затем переберите массив и выполните проверку стиля и текста. Кстати, в коде, который вы добавили к вашему вопросу, ваш третий звонок context.load
не нужно Вы также можете удалить свой второй звонок context.load
при условии, что вы переписываете первый вызов context.load
как:
context.load(paragraphs, ['text', 'style']);
Кроме того, ваш код не использует styleBuiltIn
, так что вы можете удалить все ссылки на него.