我插入了一个内容控件,有什么办法可以滚动到文档内这个内容控件的位置吗?

阅读次数 32

我插入了一个内容控件,知道这个内容控件的Tag,有什么办法可以滚动到文档内这个内容控件的位置吗?实现效果类似锚点,我现在找了文档内的ScrollIntoView或者ScrollTo,但是两者需要的参数我不知道怎么基于这个内容控件去取,我代码如下:

// 取得文档类型应用对象
  const app = wpsComponentRef.value.wpsInstance.Application;
  // 内容控件对象
  const contentControls = await app.ActiveDocument.ContentControls;
  // 获取文档内容控件的数量
  const controlCount = await contentControls.Count;
  // 循环遍历方式查到目标控件
  for (let i = 1; i <= controlCount; i++) {
    const contentControl = await contentControls.Item(i);
    // 获取内容控件Tag
    const Tag = await contentControl.Tag;
    if (Tag === item.tag) {
      console.log(item, 'contentControl');
      // 获取内容控件的范围
      const range = await contentControl.Range;
      // 获取起始位置
      const start = await range.Start;
      const end = await range.End;
      console.log(start, end, 'start, end');
      // // 获取range
      // const selectedRange = await app.ActiveDocument.ActiveWindow.RangeFromPoint(start, end);
      // console.log(selectedRange, 'selectedRange');
      // // 滚动文档窗口, 显示指定的区域
      // await app.ActiveDocument.ActiveWindow.ScrollIntoView(selectedRange);
      // 滚动正文容器到指定位置
      await app.ActiveDocument.ScrollTo({ ScrollLeft: 0, ScrollTop: 100 });
    }
  }
1 Answers

参考代码如下:

// 获取内容控件对象
const cc = await app.ActiveDocument.ContentControls.Item(1);
// 内容控件的区域的range位置
const start = await cc.Range.Start
const end = await cc.Range.End
// 设置range
const range = await app.ActiveDocument.Range.SetRange(start , end )
// 滚动到设定的range
await app.ActiveDocument.ActiveWindow.ScrollIntoView(range)

好的,这个可以实现