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

阅读次数 48

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

2 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)

你好,确实可以用ScrollIntoView

分两步:

  • 获取内容控件的位置:https://solution.wps.cn/docs/client/api/Word/Document.html#range
  • 使用ScrollIntoView控制滚动:https://solution.wps.cn/docs/client/api/Word/Window.html#scrollintoview

您好,因为咱们的内容控件不能获取指定的某个内容控件,假如一个文档内插入多个内容控件,每插入一个新的内容控件后我给这个内容控件设置了唯一的Tag,所以在获取目标内容控件环节我拿到所有内容控件的Count后for循环,基于已知的Tag获取到目标内容控件,代码如下: // 内容控件对象 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 });
}
},但是基于目标控件拿到的range,不管是使用ScrollIntoView还是ScrollTo,都到不到类似锚点的效果,是我获取的这个range有问题吗

你好,参考我下面的回复