我可以通过几种方式实现这一点,但让我们坚持使用AddIn本身.如果我创建一个ContentControl:
Word.run((context) => {
let control = context.document.getSelection().insertContentControl();
control.tag = 'example';
control.insertOoxml('<xml here>');
context.sync();
});
然后(当然有正确的异步处理)我删除控件:
Word.run((context) => {
let contentControls = context.document.contentControls;
context.load(contentControls, 'tag');
context.sync().then(() => {
for (let c = 0; c < contentControls.items.length; ++c) {
if (contentControls.items[c].tag === 'example') {
contentControls.items[c].delete(false); // delete the contentControl with the matching tag
}
}
context.sync()
});
});
然后我检查刚刚删除的控件的内容控件列表:
Word.run((context) => {
let contentControls = context.document.contentControls;
context.load(contentControls, 'tag');
context.sync().then(() => {
for (var i = 0; i < contentControls.items.length; ++i) {
if (contentControls.items[c].tag === 'example') {
// this tag list still includes the deleted content control until I close and reopen the document
}
}
});
});
标签仍显示已删除的内容控件.我必须关闭并重新打开文档才能刷新上下文.我是否错过了与文档当前状态正确同步的步骤? context.sync()还不够吗?
注意:delete()确实有效:内容按预期从文档中消失.当我搜索文档时,它仍然在控件列表中.
进一步的研究确定了原因.
启用TrackChanges时,文档中的ContentControls不会被实际删除.这仍然感觉像一个单词错误,但你可以检查contentcontrol上的已删除标志(不确定是否真的可能,因为它可能在某个任意级别的祖先),手动管理你的删除(因为我们正在做),或关闭跟踪更改以解决此问题.
所有这一切,我将把这个作为一个问题留下来,万一有人有更好的结果.
解决方法:
在同步上下文后尝试检查列表 – 在.then回调中:
Word.run((context) => {
let contentControls = context.document.contentControls;
context.load(contentControls, 'tag');
context.sync().then(() => {
for (let c = 0; c < contentControls.items.length; ++c) {
if (contentControls.items[c].tag === 'example') {
contentControls.items[c].delete(false); // delete the contentControl with the matching tag
}
}
context.sync().then(()=> {
//your updated list
})
});
});
标签:javascript,office-addins 来源: https://codeday.me/bug/20190710/1425371.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。