使用Office JS操作Word时,获取contentControls返回空数组求助
问题:Office JS添加内容控件后无法通过range获取到该控件
在Word文档中搜索“moslim”,找到第一个结果后插入Content Control,设置标签并替换文本。目前Content Control已成功添加到文档中,但最后通过console.log(getcontentControl.items)输出的是空数组,请问哪里操作出错了?
代码示例
Word.run(async (context) => { var searchResults = context.document.body.search('moslim'); context.load(searchResults); return context.sync().then(async function () { if (searchResults.items.length > 0) { // Get the first search result var range = searchResults.items[0].getRange(); // range.clear(); // Insert a content control around the search result var contentControl = range.insertContentControl(); // Set the tag of the content control contentControl.tag = 'your tag'; contentControl.insertText(searchResults.items[0].text.toString(), 'Replace'); // Load the content control context.load(contentControl); await context.sync() var getcontentControl = range.contentControls context.load(getcontentControl) await context.sync() console.log(getcontentControl.items) } }); });
问题原因
当通过range.insertContentControl()创建内容控件后,原range指向的是内容控件内部的文本范围,而非包含该内容控件的外部范围。此时range.contentControls会查找这个内部范围内的内容控件,自然无法找到你刚创建的那个(它是当前range的父容器)。
解决方法
有两种可行的处理方式:
直接使用已创建的contentControl对象
你已经通过context.load(contentControl)并await context.sync()完成了控件的加载,无需再从range重新获取,直接使用该对象即可:console.log(contentControl);获取当前range的父级内容控件
如果确实需要从范围维度获取,应修改为获取当前range的父级内容控件:var getcontentControl = range.parentContentControl; context.load(getcontentControl); await context.sync(); console.log(getcontentControl);
内容的提问来源于stack exchange,提问作者Gocool Ad
相关产品推荐
相关产品推荐

