问题描述
我已经完成了下一个功能。 第一个选择内容控件并使用“ track”方法进行存储:
export async function getContentControl () {
let cc = null
await window.Word.run(async context => {
try {
const recorder = context.document.getSelection()
recorder.load([
'parentContentControlOrNullObject','parentContentControlOrNullObject/isNullObject','parentContentControlOrNullObject/title'])
await context.sync()
cc = recorder.parentContentControlOrNullObject
console.log('cc',cc)
if (cc) {
console.log('pre track')
cc.load([
'font','font/highlightColor'
])
cc.track()
cc.font.highlightColor = null
await context.sync()
console.log('post track')
} else {
message.error('Here not exist any component! Please,select a component.')
}
} catch (error) {
console.log('error getInfoComponent',error)
}
})
return cc
}
第二,它具有内容控制对象和一种颜色作为参数来使用此颜色进行内容控制的高亮:
export async function highlightOneContentControl (currrentContentControl,color) {
await window.Word.run(async context => {
currrentContentControl.select()
console.log('currrentContentControl',currrentContentControl)
currrentContentControl.font.highlightColor = color
currrentContentControl.untrack()
await context.sync()
})
}
前端的代码是接下来的两个按钮:
<Button
onClick={async () => {
const cc = await getContentControl()
console.log('in button',cc)
setMyCC(cc)
}}
>
get CC
</Button>
<Button
onClick={async () => {
await highlightOneContentControl(myCC,'Yellow')
}}
>
highlight CC
</Button>
console.log消息是下一条: console log messages
如您所见,似乎font.hightColor已更改,但内容控件仍然保持不突出显示: word capture of content control
解决方法
已解决!!!
我目前发现的解决方案是将内容控件作为参数传递给运行方法:
export async function highlightOneContentControl (currentContentControl,color) {
await window.Word.run(currentContentControl,async context => {
currentContentControl.select()
console.log('currentContentControl',currentContentControl)
currentContentControl.font.highlightColor = color
currentContentControl.untrack()
await context.sync()
})
}
请,您能告诉我解决方案是正确还是错误? 非常感谢您的宝贵时间!
,[虽然 FranchoZGZ 已经回答了他们自己的问题,但我认为添加更多细节可能会有所帮助,因为我为此苦苦挣扎了几个小时。]
我发现当您跟踪一个实体(段落/...)时,虽然这意味着您可以在不同的 Word.run 上下文中使用它,但您必须使用该项目的上下文而不是 Word.run 中的那个。
希望这个例子有助于解释。这看起来非常微妙,而且很难弄清楚你做错了什么。所以,希望这有助于节省其他人的时间。
let selection = await Word.run(async ctx => {
let selectionInner = ctx.document.getSelection();
ctx.load(selectionInner);
await ctx.sync();
selectionInner.track();
await ctx.sync();
return selectionInner;
});
await Word.run(async ctx => {
// THIS IS WRONG (AS USES THE WRONG CONTEXT)
ctx.load(selection.paragraphs);
// THIS WORKS AS USES THE CONTEXT FOR THE TRACKED ITEM
selection.context.load(selection.paragraphs);
});