Вставка текста шаблона в документ Google в скрипте Google Apps - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь создать простой скрипт, который предварительно заполняет шаблон в документе Google в точке курсора.Я немного застрял на том, как добавить текст и элементы списка одновременно.Вот что у меня есть:

function onOpen() {
  var ui = DocumentApp.getUi();
  // Or FormApp or SpreadsheetApp.
  ui.createMenu('Templates')
      .addItem('Insert Template', 'insertTemplate')
      .addToUi();

}

function insertTemplate() {
  var cursor = DocumentApp.getActiveDocument().getCursor();
  if (cursor) {

    var element = cursor.insertText("Some Header\n")
    element.setBold(true);

    var options = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'};
    var today  = new Date();
    dateStr = today.toLocaleDateString("en-US", options) + '\n\n';

    var element = cursor.insertText(dateStr);
    element.setBold(true);

    var body = DocumentApp.getActiveDocument().getBody();

    colors = ["blue", "red", "yellow"]
    colors.forEach( function(color) { 
      body.appendListItem(color + ": ").setGlyphType(DocumentApp.GlyphType.BULLET);
    });

  } else {
    DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  }
}

Это правильно выводит что-то вроде:

Feb 12, 2019

Some Header

 * blue
 * red
 * yellow

Теперь я хочу добавить еще одну простую строку текста после списка, но если я сделаю это скурсор, он добавляет его до даты.Как найти последнюю позицию последнего элемента и вставить после него текст?

1 Ответ

0 голосов
/ 28 февраля 2019
  • Вы хотите поместить текст и список в позицию курсора.
  • Вы хотите поместить текст в последнюю строку следующим образом.
Результат, который вы хотите
Feb 12, 2019

Some Header

 * blue
 * red
 * yellow

sample text <--- here

Если мое понимание верно, как насчет этой модификации?В этой модификации я использовал следующий поток:

  1. Извлечение дочернего индекса у курсора.
    • В этой модификации этот дочерний индекс используется как смещение тела.
  2. Поместите dateStr, "Some Header\n" и список для следующего дочернего индекса.
  3. Поместите текст в последнюю строку.

Я думаю, что есть несколько решений для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Модифицированный скрипт:

function insertTemplate() {
  var doc = DocumentApp.getActiveDocument(); // Added
  var cursor = doc.getCursor(); // Modified
  if (cursor) {
    var options = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'};
    var today  = new Date();
    dateStr = today.toLocaleDateString("en-US", options) + '\n\n';
    var body = doc.getBody();

    // Below script was modified.
    var offset = body.getChildIndex(cursor.getElement());
    body.insertParagraph(offset, dateStr);
    body.insertParagraph(++offset, "Some Header\n");
    colors = ["blue", "red", "yellow"]
    colors.forEach(function(color, i) {
      body.insertListItem(++offset, color + ": ").setGlyphType(DocumentApp.GlyphType.BULLET);
    });
    body.insertParagraph(--offset + colors.length, "sample text"); // Please set the text here.

  } else {
    DocumentApp.getUi().alert('Cannot find a cursor in the document.');
  }
}

Примечание:

  • О dateStr, это было использовано из вашегоскрипт.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, который вам нужен, я прошу прощения.

...