使用contentControl.track更改Word Api Javascript的跨上下文属性

问题描述

我已经完成了下一个功能。 第一个选择内容控件并使用“ 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); 
});