1

我已经完成了下一个功能。第一个使用“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 消息是下一个: 控制台日志消息

如您所见,似乎 font.hightColor 已更改,但内容控件仍然没有突出显示: 内容控件的文字捕获

4

2 回答 2

2

解决!!!

我目前找到的解决方案是将内容控件作为参数传递给运行方法:

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()
  })
}

拜托,你能告诉我解决方案是正确的还是错误的?非常感谢您的宝贵时间!

于 2020-08-14T11:23:43.543 回答
0

[虽然 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); 
});

于 2021-01-25T17:25:41.227 回答