我正在尝试让用户可以使用一个按钮(链接的图像或文本)将模板化的文本段落插入谷歌文档的特定部分。模板化文本是一个标题,其中有一个清单复选框(使用时,删除线),并包括一个可扩展的项目符号列表。 应输入的文本脚本示例
我基本上能够构建出我想要的模板文本的外观,但还没有在网上找到解决方案,将其放置在特定文本之后,同时保持格式,并使标题成为清单。它下面应该显示的文本是“新项目:”。
我找到了将无格式文本放置在特定区域的方法,以及创建全是复选框的列表的方法,但没有包含我正在寻找的组合。
我找到了将光标放置在特定位置的方法以及“查找文本”的方法,但没有一种方法能够与我正在使用的特定格式文本一起使用。
这里是一个示例谷歌文档,其中包括我迄今为止拥有的脚本。
这是到目前为止的脚本:
function insertText() {
var headerFormatOn = {"BOLD": true, "BACKGROUND_COLOR": "#000000", "FOREGROUND_COLOR": "#FFFFFF"};
///var formatOn = {"BOLD": true, "BACKGROUND_COLOR": "#000000", "FOREGROUND_COLOR": "#FFFFFF"};
///var formatOff = {"BOLD": false, "BACKGROUND_COLOR": "#000000", "FOREGROUND_COLOR": "#FFFFFF"};
var header = "Enter_Item_Title_Here"
var bulletBody = ": ___________"
var bulletOneHeader = "Agenda Item Owner(s): ___________"
var bulletTwoHeader = "Discussant: ___________"
var bulletThreeHeader = "Discussion Date: ___________"
var bulletFourHeader = "External follow up: ___________"
var bulletFiveHeader = "Notes: ___________"
var bulletSixHeader = "Action Items: ___________"
var attributes1 = Object.entries(headerFormatOn).reduce((o, [k, v]) => Object.assign(o, {[k]: v}), {});
///var attributes2 = Object.entries(formatOn).reduce((o, [k, v]) => Object.assign(o, {[k]: v}), {});
///var attributes3 = Object.entries(formatOff).reduce((o, [k, v]) => Object.assign(o, {[k]: v}), {});
var cursor = DocumentApp.getActiveDocument().getActiveTab().asDocumentTab().getBody();
var text1 = cursor.appendParagraph(header);
text1.setHeading(DocumentApp.ParagraphHeading.HEADING3);
///var text2 = cursor.insertText(bulletBody);
///text2.setAttributes(attributes3);
var text3 = cursor.appendListItem(bulletOneHeader);
//text3.setAttributes(attributes2);
text3.setGlyphType(DocumentApp.GlyphType.BULLET).setGlyphType(DocumentApp.GlyphType.BULLET);
var text4 = cursor.appendListItem(bulletTwoHeader);
//text4.setAttributes(attributes2);
text4.setGlyphType(DocumentApp.GlyphType.BULLET);
var text5 = cursor.appendListItem(bulletThreeHeader);
text5.setGlyphType(DocumentApp.GlyphType.BULLET);
var text6 = cursor.appendListItem(bulletFourHeader);
text6.setGlyphType(DocumentApp.GlyphType.BULLET);
var text7 = cursor.appendListItem(bulletFiveHeader);
text7.setGlyphType(DocumentApp.GlyphType.BULLET);
var text8 = cursor.appendListItem(bulletSixHeader);
text8.setGlyphType(DocumentApp.GlyphType.BULLET);
var text9 = cursor.appendListItem(bulletSixHeader);
text9.setGlyphType(DocumentApp.GlyphType.BULLET);
}
我有一种感觉,其中一些可能与“追加”与“插入”有关,或者与我在搜索中读到的一些变体有关,但我无法弄清楚哪些部分需要更改为了让它发挥作用。
您的说法是正确的
I have a feeling some of it might have to do with "append" vs "insert"
。据我所知, appendParagraph(paragraph)
和 appendListItem(listItem)
是为了在文档末尾添加一些内容,而 insertParagraph(childIndex, paragraph)
和 insertListItem(childIndex, listItem)
是为了在你想要的任何地方添加一些内容,在本例中是在 the "New Items" text
之后。
这是脚本的修改版本,应该可以实现您想要的效果:
function insertText() {
var header = "Enter_Item_Title_Here"
var bulletOneHeader = "Agenda Item Owner(s): ___________"
var bulletTwoHeader = "Discussant: ___________"
var bulletThreeHeader = "Discussion Date: ___________"
var bulletFourHeader = "External follow up: ___________"
var bulletFiveHeader = "Notes: ___________"
var bulletSixHeader = "Action Items: ___________"
var cursor = DocumentApp.getActiveDocument().getActiveTab().asDocumentTab().getBody();
var pr = cursor.findText("New Items:").getElement().getParent();
var i = cursor.getChildIndex(pr) + 1;
cursor.insertParagraph(i, header).setHeading(DocumentApp.ParagraphHeading.HEADING3);
cursor.insertListItem(i + 1, bulletOneHeader).setGlyphType(DocumentApp.GlyphType.BULLET);
cursor.insertListItem(i + 2, bulletTwoHeader).setGlyphType(DocumentApp.GlyphType.BULLET);
cursor.insertListItem(i + 3, bulletThreeHeader).setGlyphType(DocumentApp.GlyphType.BULLET);
cursor.insertListItem(i + 4, bulletFourHeader).setGlyphType(DocumentApp.GlyphType.BULLET);
cursor.insertListItem(i + 5, bulletFiveHeader).setGlyphType(DocumentApp.GlyphType.BULLET);
cursor.insertListItem(i + 6, bulletSixHeader).setGlyphType(DocumentApp.GlyphType.BULLET);
}
注意:我删除了代码中未使用的行。