Word JS API:增删段落后body.paragraphs集合未更新,如何获取最新集合?
解决Word JS API段落集合未更新的问题
在Word Online环境中,你遇到的问题是因为插入段落的操作未同步到文档上下文就重新加载了段落集合。正确的做法是在插入段落之后先执行一次context.sync(),确保插入操作生效,再重新加载并获取更新后的段落集合。
修正后的代码
async function run() { await Word.run(async (context) => { var pars = context.document.body.paragraphs.load("items"); await context.sync(); console.log(pars.items.length); // 初始显示1个段落 // 插入三个新段落 ["Cat", "Dog", "Mouse"].forEach(p => context.document.body.insertParagraph(p,"End")); // 先同步,让插入操作生效 await context.sync(); // 重新加载段落集合 pars = context.document.body.paragraphs.load("items"); await context.sync(); console.log(pars.items.length); // 现在会显示4个段落 // 修改所有段落格式 pars.items.forEach(p => p.set({lineSpacing: 40, leftIndent: 10 })); await context.sync(); }) }
原因说明
Word JS API的操作采用批量队列执行机制:调用insertParagraph只是将操作加入上下文的待执行队列,并未立刻修改实际文档。只有调用context.sync()时,才会把队列里的操作同步到文档中,同时更新上下文对象的状态。
你之前的代码在插入段落之后直接重新加载paragraphs,此时插入操作还未同步到文档,所以加载到的仍是旧的段落集合。插入后先执行一次context.sync(),确保新段落已写入文档,再重新加载就能获取到完整的段落列表。
内容的提问来源于stack exchange,提问作者Watson_vas
相关产品推荐
相关产品推荐

