Google Apps Script: Как вставить таблицу в документ?

Что такое Google Apps Script и его преимущества

Google Apps Script – это облачный язык сценариев, основанный на JavaScript, который позволяет автоматизировать задачи в Google Workspace (Docs, Sheets, Slides, Drive, Gmail и т.д.). Преимущества использования Apps Script включают:

Автоматизация рутинных задач: Например, автоматическое создание отчетов, рассылку уведомлений, обновление данных.

Интеграция сервисов Google: Легкая интеграция между различными сервисами Google Workspace.

Расширение функциональности: Добавление пользовательских функций и меню в приложения Google.

Веб-приложения: Создание простых веб-приложений, работающих в браузере.

Обзор сервиса Document Service для работы с Google Документами

Document Service предоставляет API для работы с Google Документами. Он позволяет создавать, открывать, изменять и удалять документы, а также манипулировать их содержимым, включая текст, изображения, таблицы и другие элементы. Основные классы и методы, используемые для работы с таблицами:

DocumentApp: Доступ к активному документу или создание нового.

Document: Представляет Google Документ.

Body: Содержит основное содержимое документа, куда добавляются элементы.

Table: Представляет таблицу.

TableRow: Строка таблицы.

TableCell: Ячейка таблицы.

Подготовка: Создание и настройка Google Документа

Для начала работы необходимо создать новый Google Документ или открыть существующий. Затем откройте редактор Apps Script, выбрав Инструменты > Редактор скриптов. Свяжите скрипт с документом, чтобы получить доступ к его содержимому.

Основные способы вставки таблицы в документ с помощью Apps Script

Вставка пустой таблицы: метод insertTable()

Метод insertTable() позволяет вставить пустую таблицу в указанное место документа. Место вставки определяется объектом Position или индексом элемента. Вот пример:

/**
 * Вставляет пустую таблицу в Google Doc.
 */
function insertEmptyTable() {
  // @ts-ignore
  const doc: GoogleAppsScript.Document.Document = DocumentApp.getActiveDocument();
  const body: GoogleAppsScript.Document.Body = doc.getBody();
  // Insert a 3x3 table at the beginning of the document.
  // @ts-ignore
  body.insertTable(0, [["", "", ""], ["", "", ""], ["", "", ""]]);
}

Добавление данных в таблицу: методы appendTableRow() и appendTableCell()

После создания таблицы можно добавлять данные в строки и ячейки с помощью методов appendTableRow() и appendTableCell().

/**
 * Добавляет данные в существующую таблицу.
 */
function populateTable() {
  // @ts-ignore
  const doc: GoogleAppsScript.Document.Document = DocumentApp.getActiveDocument();
  const body: GoogleAppsScript.Document.Body = doc.getBody();
  const tables: GoogleAppsScript.Document.Table[] = body.getTables();

  if (tables.length > 0) {
    const table: GoogleAppsScript.Document.Table = tables[0];
    // Add a new row to the table.
    const newRow: string[] = ["Data 1", "Data 2", "Data 3"];
    table.appendTableRow(newRow);
  } else {
    Logger.log("No tables found in the document.");
  }
}

Создание таблицы из массива данных

Наиболее распространенный сценарий – создание таблицы на основе данных из массива. В этом случае код будет перебирать массив и добавлять строки в таблицу.

/**
 * Создает таблицу из массива данных.
 */
function createTableFromArray(data: string[][]) {
  // @ts-ignore
  const doc: GoogleAppsScript.Document.Document = DocumentApp.getActiveDocument();
  const body: GoogleAppsScript.Document.Body = doc.getBody();

  // Create a table from the data array.
  const table: GoogleAppsScript.Document.Table = body.appendTable(data);

  return table;
}

// Example usage:
function exampleUsage() {
  const data: string[][] = [
    ["Header 1", "Header 2", "Header 3"],
    ["Row 1, Cell 1", "Row 1, Cell 2", "Row 1, Cell 3"],
    ["Row 2, Cell 1", "Row 2, Cell 2", "Row 2, Cell 3"]
  ];

  createTableFromArray(data);
}

Расширенные возможности работы с таблицами

Настройка форматирования таблицы (размер шрифта, цвет фона, границы)

Google Apps Script позволяет настраивать форматирование таблицы, включая размер шрифта, цвет фона и границы. Для этого используются методы TableCell.setBackgroundColor(), TableCell.setForegroundColor(), TableCell.setFontSize(), TableCell.setBorderWidth() и другие.

Реклама
/**
 * Форматирует ячейку таблицы.
 * @param {GoogleAppsScript.Document.TableCell} cell - Ячейка таблицы.
 */
function formatTableCell(cell: GoogleAppsScript.Document.TableCell) {
  cell.setBackgroundColor("#f0f0f0"); // Light gray background.
  cell.setForegroundColor("#000000"); // Black text.
  cell.setFontSize(10);
}

Изменение структуры таблицы: добавление и удаление строк/столбцов

Можно добавлять и удалять строки и столбцы в таблице с помощью методов insertTableRow() (вставка строки) и removeTableRow() (удаление строки). Для работы со столбцами необходимо вручную перебирать строки и добавлять/удалять ячейки.

Работа с ячейками: получение и изменение содержимого

Для получения и изменения содержимого ячейки используются методы TableCell.getText() и TableCell.setText() соответственно.

/**
 * Получает и изменяет текст в ячейке таблицы.
 * @param {GoogleAppsScript.Document.TableCell} cell - Ячейка таблицы.
 */
function modifyTableCellText(cell: GoogleAppsScript.Document.TableCell) {
  const currentText: string = cell.getText();
  cell.setText(currentText + " (modified)");
}

Объединение ячеек

Объединение ячеек напрямую через Apps Script API не поддерживается. Необходимо использовать обходные пути, например, создание новой таблицы с нужной структурой и копирование данных из исходной таблицы.

Примеры практического использования

Автоматическое создание таблицы на основе данных из Google Sheets

Этот пример показывает, как извлечь данные из Google Sheets и создать таблицу в Google Docs.

/**
 * Создает таблицу в Google Docs на основе данных из Google Sheets.
 */
function createTableFromSheetData() {
  // @ts-ignore
  const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getActiveSheet();
  const range: GoogleAppsScript.Spreadsheet.Range = sheet.getDataRange();
  const values: any[][] = range.getValues();

  // @ts-ignore
  const doc: GoogleAppsScript.Document.Document = DocumentApp.getActiveDocument();
  const body: GoogleAppsScript.Document.Body = doc.getBody();

  body.appendTable(values);
}

Генерация отчета в Google Docs с использованием таблиц

Можно создать шаблон отчета в Google Docs и заполнить его данными из различных источников, используя таблицы для структурирования информации.

Создание таблицы с гиперссылками

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

/**
 * Создает таблицу с гиперссылками.
 */
function createTableWithLinks() {
  // @ts-ignore
  const doc: GoogleAppsScript.Document.Document = DocumentApp.getActiveDocument();
  const body: GoogleAppsScript.Document.Body = doc.getBody();

  const data: string[][] = [
    ["Google", "https://www.google.com"],
    ["YouTube", "https://www.youtube.com"]
  ];

  const table: GoogleAppsScript.Document.Table = body.appendTable(data);

  // Set hyperlinks for each cell.
  for (let i = 0; i < table.getNumRows(); i++) {
    const cell: GoogleAppsScript.Document.TableCell = table.getRow(i).getCell(1);
    cell.setText(data[i][0]); // Display text
    // @ts-ignore
    cell.setLinkUrl(data[i][1]); // Actual link
  }
}

Заключение

Краткое резюме основных моментов

В этой статье мы рассмотрели различные способы вставки таблиц в Google Документы с помощью Google Apps Script, начиная от простых операций, таких как создание пустой таблицы, и заканчивая более сложными задачами, такими как создание таблиц на основе данных из Google Sheets и форматирование таблиц.

Советы по оптимизации кода и избежанию распространенных ошибок

Используйте типизацию (@ts-ignore, JSDoc) для облегчения отладки.

Кэшируйте часто используемые объекты (например, Document.getBody()) для повышения производительности.

Обрабатывайте ошибки и исключения, чтобы скрипт работал стабильно.

Тестируйте код на небольших объемах данных перед запуском на больших.

Ресурсы для дальнейшего изучения Google Apps Script

Официальная документация Google Apps Script

Справочник по Document Service

Примеры кода Google Apps Script


Добавить комментарий