ms-word - 如何使用 contentControls.getItem 获取特定的内容控件?
问题描述
我正在尝试使用其位置从文档中获取内容控件。ccs.getFirstOrNullObject();
有效,但我不想要第一个内容控制。ccs.getItem(0);
(或任何整数值)返回错误:
ItemNotFound:我们找不到您请求的项目。检查 OfficeExtension.Error.debugInfo 以获取更多信息。
如何通过其在文档中的位置来指定特定的内容控件?
脚本实验室的代码:
async function
getAdjacentRange() {
await Word.run(async (context) => {
var ccs = context.document.contentControls;
ccs.load("items");
await context.sync();
console.log("Nr cc: " + ccs.items.length);
//works:
//let cc = ccs.getFirstOrNullObject();
//doesn't work:
let cc = ccs.getItem(0);
let ccRange = cc.getRange("Start");
let ccParas = ccRange.paragraphs; cc.load("text,range,paragraphs");
let ccPara = ccParas.getFirst();
ccParas.load("items")
let paraRange = ccPara.getRange("Start");
let rng = paraRange.expandTo(ccRange);
let em = [" "];
console.log(em.length.toString());
let words = rng.getTextRanges(em, true);
words.load("items");
await context.sync();
let nrWords = words.items.length;
let lastWord = words.items[nrWords - 1];
let wordBeforeCC = words.getFirst();
wordBeforeCC.load("text");
await context.sync();
console.log(cc.text + "/" + wordBeforeCC.text + "nr Words: " + nrWords + "last word: " + lastWord.text);
})
}
解决方案
让我们不要混淆getItem()
与getItemAt()
方法。 getItem()
与 ID 一起使用,而getItemAt()
与位置一起使用。
鉴于 CC 可以在页眉/页脚和其他子文档中,推断顺序可能具有挑战性,因此getItemAt()
cc 集合中没有方法。
话虽如此,items 数组具有按阅读顺序排列的内容控件,因此items[0]
为您提供了第一个内容控件,items[n - 1]
最后一个(假设N
文档中的 ccs)。
是的,您需要全部加载它们。
这是一个关于如何访问文档中第三个内容控件的示例:
await Word.run(async (context) => {
let ccs = context.document.contentControls;
ccs.load();
await context.sync();
//assuming there are more then 2
if(ccs.items.length >= 2)
console.log(ccs.items[2].text);
});
最后,我建议您使用其他方法来访问 CC。
即和。contentControls.getById
_contentControls.getByName()
getByTag()
推荐阅读
- python - 了解字典抽认卡游戏错误
- sql - 对 Google bigquery 中的非分区数据进行运行计数
- angular - 是否可以使用 ng serve 在 Angular 8 项目中使用 Ionic 4?
- bitbucket-server - 将存储库批量导入本地 bitbucket 安装
- mysql - MySQL 数据在 Toad Edge 中可见,但在 CLI 中不可见
- r - 如何获取字符串中两个已定义字符之间的数据?r
- html - 如何遍历字符串中的单个字符
- javascript - Highcharts - 不能强制 x 轴在某个日期停止
- vb.net - 计算贴现率
- python - and&or 在 print() 函数中如何工作?