Как однозначно определить таблицы, которые я вставил? - PullRequest
0 голосов
/ 03 мая 2020

Мне нужно вставить некоторые таблицы в Документы Google с помощью скрипта, а затем периодически обновлять только те таблицы, которые я вставил с помощью скрипта. Я не хочу изменять другие таблицы, которые были вставлены без сценария ... просто измените те, которые были вставлены сценарием. Однако я не вижу способа разместить атрибут или уникальное имя для каждой таблицы. Есть ли способ сделать это?

var table = body.insertTable(insertPoint, [[row.join("")]]);

1 Ответ

2 голосов
/ 03 мая 2020

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите получить указанную таблицу c, используя скрипт Google Apps.
  • Вы хотите поместить таблицу, используя var table = body.insertTable(insertPoint, [[row.join("")]]); .
  • Место и порядок таблиц изменены.

Для этого, как насчет этого ответа?

Проблема и обходной путь:

К сожалению на текущем этапе таблица в документе Google не может иметь уникальный идентификатор. Таким образом, указанная таблица c не может быть получена напрямую. В вашем случае для достижения вышеуказанной цели в этом ответе я хотел бы предложить следующий обходной путь:

  • Когда таблица вставлена, текст добавляется в верхнюю часть таблицы как уникальный идентификатор. Уникальный идентификатор, по-видимому, скрыт, если изменить цвет шрифта на тот же, что и цвет фона, и изменить размер шрифта на 1.
  • При извлечении таблицы указанная таблица c извлекается с использованием уникального идентификатора. .

Пример сценария:

Для вставки таблицы:

function putTable() {
  const documentId = "###";  // Please set Document ID.
  const uniqueIdOfTable = "tableId1";  // Please set the unique table ID. In this sample, "tableId1" is used.
  const insertPoint = 1;  // In this sample, "1" is the minumum size.
  const row = ["a1", "b1", "c1"];

  const body = DocumentApp.openById(documentId).getBody();
  const table = body.insertTable(insertPoint, [[row.join("")]]);
  const text = table.getPreviousSibling().asParagraph().appendText("\n" + uniqueIdOfTable);
  text.setFontSize(1).setForegroundColor(text.getBackgroundColor() || "#ffffff");
}
  • При запуске этого сценария вставляется таблица и уникальный идентификатор tableId1. И уникальный идентификатор скрывается размером шрифта и цветом шрифта.

Для извлечения таблицы спецификаций c с использованием уникального идентификатора:

function getTable(documentId, uniqueIdOfTable) {
  const body = DocumentApp.openById(documentId).getBody();
  const index = body.getChildIndex(body.findText(uniqueIdOfTable).getElement().getParent());
  const element = body.getChild(index + 1);
  return element.getType() === DocumentApp.ElementType.TABLE ? element.asTable() : null;
}

// Please run this function.
function main() {
  const documentId = "###";  // Please set Document ID.
  const uniqueIdOfTable = "tableId1";  // Please set the unique table ID. In this sample, "tableId1" is used.
  const table = getTable(documentId, uniqueIdOfTable);

  console.log(table.editAsText().getText())
}
  • Когда вы запустить main(), таблица извлекается с использованием уникального идентификатора tableId1. В этом случае getTable() возвращает объект таблицы.

Примечание:

  • Это простой пример сценария для объяснения обходного пути. Поэтому, пожалуйста, измените это для вашей реальной ситуации.
...