插入文本时使用 MS Word 加载项 API 创建内容控件
Create content controls using MS Word Add-In API while inserting text
我正在使用加载项将纯文本段落插入到我的 Word 文档中,但我想在插入此段落时在该段落的某些词上放置内容控件。有什么方法可以做到这一点,或者内容控件是否仅在插入文本后才起作用?
是的,如以下代码片段所示,可以通过修改该工具提供的示例在 Script Lab 中编写。
诀窍是使用(至少)两个范围,一个用于文本,另一个用于内容控件,如下面的代码片段和最后的屏幕截图所示.
说明
起点是目标区域对应的range
(示例假设为整个文档)。然后 "copied" 到一个新的 range
对象,用于插入文本(该示例假设它应该出现在现有内容的末尾)。
新的文本内容,直到需要内容控件的地方,被插入到一个新的段落("on a new line") - 字符串开头的\n
。
然后在内容控件的文本范围末尾实例化一个新的 range
。这是插入、格式化和分配给它的文本。
然后将文本目标 range
设置为 在内容控制范围 之后,附加文本 "appended".
代码
await Word.run(async (context) => {
let rngDoc = context.document.body.getRange("Content");
let rngTarget = rngDoc.getRange("End");
rngDoc.load("text");
await context.sync();
console.log(rngDoc.text);
rngTarget.insertText("\nStart: ", "Start");
let rngCC = rngTarget.getRange("End");
let cc = rngCC.insertContentControl();
cc.appearance = Word.ContentControlAppearance.boundingBox;
cc.insertText("In content control", "Replace");
rngTarget = rngCC.getRange("After");
rngTarget.insertText(" End.", "After");
await context.sync();
console.log("Content controls inserted: " );
});
结果
我正在使用加载项将纯文本段落插入到我的 Word 文档中,但我想在插入此段落时在该段落的某些词上放置内容控件。有什么方法可以做到这一点,或者内容控件是否仅在插入文本后才起作用?
是的,如以下代码片段所示,可以通过修改该工具提供的示例在 Script Lab 中编写。
诀窍是使用(至少)两个范围,一个用于文本,另一个用于内容控件,如下面的代码片段和最后的屏幕截图所示.
说明
起点是目标区域对应的range
(示例假设为整个文档)。然后 "copied" 到一个新的 range
对象,用于插入文本(该示例假设它应该出现在现有内容的末尾)。
新的文本内容,直到需要内容控件的地方,被插入到一个新的段落("on a new line") - 字符串开头的\n
。
然后在内容控件的文本范围末尾实例化一个新的 range
。这是插入、格式化和分配给它的文本。
然后将文本目标 range
设置为 在内容控制范围 之后,附加文本 "appended".
代码
await Word.run(async (context) => {
let rngDoc = context.document.body.getRange("Content");
let rngTarget = rngDoc.getRange("End");
rngDoc.load("text");
await context.sync();
console.log(rngDoc.text);
rngTarget.insertText("\nStart: ", "Start");
let rngCC = rngTarget.getRange("End");
let cc = rngCC.insertContentControl();
cc.appearance = Word.ContentControlAppearance.boundingBox;
cc.insertText("In content control", "Replace");
rngTarget = rngCC.getRange("After");
rngTarget.insertText(" End.", "After");
await context.sync();
console.log("Content controls inserted: " );
});
结果