如何使用contentControls.getItem获取特定的内容控件?
How to get a specific content control using contentControls.getItem?
我正在尝试使用其位置从文档中选取内容控件。 ccs.getFirstOrNullObject();
有效,但我不想要第一个内容控件。 ccs.getItem(0);
(或任何整数值)returns 错误:
ItemNotFound: We couldn’t find the item you requested. Check the
OfficeExtension.Error.debugInfo for more information.
如何根据文档中的位置指定特定的内容控件?
来自脚本实验室的代码:
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 可以在 header/footer 和其他子文档中,推断顺序可能具有挑战性,因此 cc 集合中没有 getItemAt()
方法。
也就是说,items 数组有阅读顺序的内容控件,所以 items[0]
给你第一个内容控件,items[n - 1]
最后一个(假设 N
ccs in文档)。
是的,您需要将它们全部加载。
这是一个关于如何访问文档中的第三个内容控件的示例:
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()
。
我正在尝试使用其位置从文档中选取内容控件。 ccs.getFirstOrNullObject();
有效,但我不想要第一个内容控件。 ccs.getItem(0);
(或任何整数值)returns 错误:
ItemNotFound: We couldn’t find the item you requested. Check the OfficeExtension.Error.debugInfo for more information.
如何根据文档中的位置指定特定的内容控件?
来自脚本实验室的代码:
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 可以在 header/footer 和其他子文档中,推断顺序可能具有挑战性,因此 cc 集合中没有 getItemAt()
方法。
也就是说,items 数组有阅读顺序的内容控件,所以 items[0]
给你第一个内容控件,items[n - 1]
最后一个(假设 N
ccs in文档)。
是的,您需要将它们全部加载。
这是一个关于如何访问文档中的第三个内容控件的示例:
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()
。