wps文档内插入内容控件后怎么实时通知外部插入了内容控件

阅读次数 60

image.png 需求如上图,我需要知道插入成功哪个内容控件,内容控件插入成功后,我要记录这个内容控件 我实现代码如下:

watchEffect(async () => {
  if (wpsComponentRef.value) {
    const wpsInstance = wpsComponentRef.value.wpsInstance;
    // 实例化
    await wpsInstance.ready();
    // // 开启限制编辑
    // await wpsInstance.Application.ActiveDocument.Protect('test');
    // // 停止限制编辑
    // await wpsInstance.Application.ActiveDocument.Protect('test');

    // 监听选区变化事件
    wpsInstance.ApiEvent.AddApiEventListener('WindowSelectionChange', async (data: any) => {
      console.log('WindowSelectionChange: ', data);
      // 在此监听文档内容的改变
      // 当文档内容变化时监听插入的内容控件的数量变化
      updateControlListStatus();
    });
  }
});

通过

wpsInstance.ApiEvent.AddApiEventListener('WindowSelectionChange', async (data: any) => {
      console.log('WindowSelectionChange: ', data);
      // 在此监听文档内容的改变
      // 当文档内容变化时监听插入的内容控件的数量变化
      updateControlListStatus();
    });

去监听文档有变化了,我就认为已经插入成功了这个内容控件,就把这个内容控件记录,但是WindowSelectionChange不太稳定,有没有别的更好的方式?

2 Answers

你好,可以试试如下监听方式,内容控件是有id属性的,通过属性判断是新添加,还是已有控件:

instance.ApiEvent.AddApiEventListener('ContentControlOnEnter', data => {
   console.log('ContentControlOnEnter: ', data)
})

“通过属性判断是新添加,还是已有控件”具体有什么属性吗?

先获取所有内容控件id,记录下来。新添加的内容控件,id不在已有列表中

哦哦,那就是文档外记录,跟整个文档内插入的列表做对比,我现在就是类似做法,还有就是我们文档内插入的是内容控件,类似https://solution.wps.cn/examples/run?id=4,你们官网的这个例子,我不太清楚你们内容控件被业务数据取代的是value值还是“PlaceholderText”,内容控件应该是没有value值的吧?

我想要知道控件被点击了,是哪个监听那个事件呢? 点击控件时我想打开一个弹窗. 而且你这个ContentControlOnEnter不存在