使用脚本将带有复选框和项目符号列表的标题放置在 Google 文档中的特定文本后面

问题描述 投票:0回答:1

我正在尝试让用户可以使用一个按钮(链接的图像或文本)将模板化的文本段落插入谷歌文档的特定部分。模板化文本是一个标题,其中有一个清单复选框(使用时,删除线),并包括一个可扩展的项目符号列表。 应输入的文本脚本示例

我基本上能够构建出我想要的模板文本的外观,但还没有在网上找到解决方案,将其放置在特定文本之后,同时保持格式,并使标题成为清单。它下面应该显示的文本是“新项目:”。

我找到了将无格式文本放置在特定区域的方法,以及创建全是复选框的列表的方法,但没有包含我正在寻找的组合。

我找到了将光标放置在特定位置的方法以及“查找文本”的方法,但没有一种方法能够与我正在使用的特定格式文本一起使用。

这里是一个示例谷歌文档,其中包括我迄今为止拥有的脚本。

这是到目前为止的脚本:

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);
}

我有一种感觉,其中一些可能与“追加”与“插入”有关,或者与我在搜索中读到的一些变体有关,但我无法弄清楚哪些部分需要更改为了让它发挥作用。

javascript google-docs checklistbox
1个回答
0
投票

您的说法是正确的

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);
}

注意:我删除了代码中未使用的行。

© www.soinside.com 2019 - 2024. All rights reserved.