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, так что вы можете удалить все ссылки на него.

Другие вопросы по тегам