Как я могу получить свой код для вставки в курсор, вместо автоматического добавления в конце документа - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь создать компоновщик шаблонов из Google Docs (что мне удалось), где он вытягивает содержимое из 1 документа в текущий, но моя проблема в том, что при настройке он добавляет каждый элемент in, в конец документа каждый раз вместо позиции курсора, и все мои попытки его провалились.

Вот функция, которая вставляет часть шаблона:

function insert() {

      var baseDoc = DocumentApp.getActiveDocument();

    var body = baseDoc.getBody();

    var otherBody = DocumentApp.openById(docID).getBody();

    var totalElements = otherBody.getNumChildren();

    for (var j = 0; j < totalElements; ++j) {
        var element = otherBody.getChild(j).copy();
        var type = element.getType();
        if (type == DocumentApp.ElementType.PARAGRAPH)
            body.appendParagraph(element);
        else if (type == DocumentApp.ElementType.TABLE)
            body.appendTable(element);
        else if (type == DocumentApp.ElementType.LIST_ITEM)
            body.appendListItem(element);
        else if (type == DocumentApp.ElementType.INLINE_IMAGE)
            body.appendImage(element);

        // add other element types as you want

        else
            throw new Error("According to the doc this type couldn't appear in the body: " + type);
    }
}

1 Ответ

1 голос
/ 13 января 2020
  • Вы хотите вставить абзацы, таблицы, списки и изображения в otherBody в положение курсора активного документа.

Если мое понимание верно, как насчет этого ответа ? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • В вашем случае, сначала, пожалуйста, восстановите позицию курсора активного документа.
  • appendParagraph добавляет абзац к последней части документа. Так что в этом случае, пожалуйста, используйте insertParagraph.
    • И в этом случае, пожалуйста, установите позицию.

Когда вышеуказанные точки отражаются в вашем сценарии, он становится следующим:

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

Пожалуйста, наведите курсор на активный Документ и запустите функцию insert. При этом абзацы, таблицы, списки и изображения в otherBody вставляются в позицию курсора.

function insert() {
  var docID = "###";  // Please set the Document ID.

  var baseDoc = DocumentApp.getActiveDocument();
  var body = baseDoc.getBody();
  var otherBody = DocumentApp.openById(docID).getBody();

  var cursor = baseDoc.getCursor();  // Added
  var cursorPos = baseDoc.getBody().getChildIndex(cursor.getElement());  // Added

  var totalElements = otherBody.getNumChildren();
  for (var j = 0; j < totalElements; ++j) {
    var element = otherBody.getChild(j).copy();
    var type = element.getType();
    if (type == DocumentApp.ElementType.PARAGRAPH)
      body.insertParagraph(cursorPos + j, element);  // Modified
    else if (type == DocumentApp.ElementType.TABLE)
      body.insertTable(cursorPos + j, element);  // Modified
    else if (type == DocumentApp.ElementType.LIST_ITEM)
      body.insertListItem(cursorPos + j, element);  // Modified
    else if (type == DocumentApp.ElementType.INLINE_IMAGE)
      body.insertImage(cursorPos + j, element);  // Modified
    else
      throw new Error("According to the doc this type couldn't appear in the body: " + type);
  }
}

Ссылки:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...