Создание объекта Table и добавление его позже - PullRequest
0 голосов
/ 05 февраля 2019

Вы знаете, как в обычном веб-DOM вы можете создать элемент HTML, а затем добавить его в DOM?

Я хочу сделать аналогичный сценарий в Google Apps, особенно для Документов Google.,То есть я хочу создать Table объект, назовем его table, без использования Body.appendTable().Затем позже я хочу добавить его с Body.appendTable(table) - который действительно уже существует в их API.

Проблема в том, что я нигде не вижу такого метода, как createTable()this.

То, что я пробовал

Простое использование new тоже не работает, по-видимому:

var table = new Table();
var table = new Document.Table();
var table = new GoogleAppsScript.Document.Table();

Соответствующие результаты:

ReferenceError: "Table" is not defined.
ReferenceError: "Document" is not defined.
ReferenceError: "GoogleAppsScript" is not defined.

(я попробовал последний, основываясь на https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/google-apps-script/google-apps-script.document.d.ts.)

Или, может быть, это сработало бы, если бы я знал путь к интерфейсу Table.Но и это не так:

var table = new DocumentApp.Document.Table();

... потому что это дает:

TypeError: Cannot read property "Table" from undefined.

(что имеет смысл. DocumentApp не имеет клавиши Document.)

Мотивация:

Я знаю, что мог бы создать временный документ, затем добавить к нему временную таблицу и впоследствии удалить ее.

Но это означает, что где угодно скриптпользователь может самостоятельно очистить этот временный документ.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы можете временно добавить пустую таблицу, а затем удалить ее, и ссылка все еще в порядке и может использоваться для добавления позже:

  var body = DocumentApp.getActiveDocument().getBody();
  var table = body.insertTable(0);
  body.removeChild(table);
  // ...
  table.appendTableRow().appendTableCell('test');
  // ...
  body.appendTable(table);

В частности, это решает проблему отсутствия чего-либо дляочистить, если скрипт умирает в одной из // ... частей.

Кроме того, изначально использование appendTable() или любого из его вариантов вместо insertTable(0) означает, что Документы Google автоматически добавят также пустой абзац,К сожалению, попытка удалить его приводит к ошибке, Google Apps Script: Can't remove the last paragraph in a document section.

Таким образом, использование insertTable(0) гарантирует, что не будет абсолютно никаких изменений в исходном документе до тех пор, пока вы не решите appendTable(table) позже, то есть ничего, что быочистить, если сценарий завершится неудачей до этого момента.

0 голосов
/ 05 февраля 2019

Вы можете создать 2D массив var table =[[]].Затем измените его, как вы хотите.Body.appendTable(array) принимает массив строк.

В качестве альтернативы, Body.appendTable() возвращает объект таблицы, который можно изменить / переместить позже.

...