如何列出标题(标题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}]});
}
});
答案 0 :(得分:0)
我假设当你说“名字”时你指的是标题的文字。
这可以做到。您的代码应加载所有段落。迭代它们并使用样式或 styleBuiltIn 属性来查找样式名称以“标题”开头的那些。然后遍历那些查看 text 属性的人,找到你想要的那个。然后使用insertParagraph
方法插入新段落。
更新:(响应下面的OP问题):您应该始终最小化context.sync
的调用,因此您应该尽量避免在循环中调用它。尝试使用for循环将每个段落添加到数组中,然后context.load
数组并执行context.sync
。然后遍历数组并进行样式和文本检查。顺便说一下,在您添加到问题中的代码中,您的第三次调用context.load
是不必要的。您也可以删除第二次context.load
来电,前提是您将context.load
的第一个电话重写为:
context.load(paragraphs, ['text', 'style']);
此外,您的代码不使用styleBuiltIn
,因此您可以删除对它的所有引用。