Creative task: Create PDF from Google Sheets with Google Apps Script

В данной работе рассмотрим, как с помощью скрипта автоматически создавать PDF-файлы из Google Таблиц, а затем отправлять их по email или сохранять в Google Диске.

🔗Ссылку на источник: Как настроить автоматическое создание PDF из Google Таблиц

✏️ Разбор кода и добавление комментариев

Вот пример скрипта, который конвертирует Google Таблицу в PDF и отправляет её по email (добавленные комментарии поясняют каждую строку кода):

function exportToPDF() {  
   // Получаем активную электронную таблицу (Google Sheet)
   const sheet = SpreadsheetApp.getActiveSpreadsheet();  

   // Получаем уникальный идентификатор активного листа
   const sheetId = sheet.getSheetId();  

   // Формируем URL для экспорта листа в формат PDF
   const pdfUrl = `${sheet.getUrl()}/export?format=pdf&gid=${sheetId}`;

   // Определяем параметры запроса
   const options = {  
      headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() }, // Авторизация через OAuth
      muteHttpExceptions: true // Отключает выброс ошибок при проблемах с запросом
   };

   // Отправляем запрос для получения PDF-файла
   const response = UrlFetchApp.fetch(pdfUrl, options);

   // Преобразуем полученный файл в формат Blob и задаём ему имя
   const blob = response.getBlob().setName('Report.pdf');

   // Сохраняем файл в корневую папку Google Диска
   DriveApp.createFile(blob);
}

🔹 Что делает код?

  • Получает текущую Google Таблицу и её ID.
  • Формирует URL для экспорта в формате PDF.
  • Использует UrlFetchApp.fetch для получения PDF-файла.

Предварительно создана таблица на листе “Товары”:

✏️ Измененяем и улучшаем код

function exportAndSavePDF() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Товары"); // Название листа
  var sheetId = sheet.getSheetId();
  var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId();

  // Создаём URL-адрес для экспорта в PDF
  var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?format=pdf" +
            "&gid=" + sheetId + "&portrait=true&size=A4";

  // Отправляем запрос на скачивание PDF
  var response = UrlFetchApp.fetch(url, {
    headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() }
  });

  var pdfBlob = response.getBlob().setName(sheet.getName() + ".pdf"); // Создаём файл

  // Сохраняем файл в Google Диск в указанную папку
  var folder = DriveApp.getFolderById("1SRzYbiBC73e432uo5WKec46_kxU1PxgH"); // ID папки Google Диска
  var file = folder.createFile(pdfBlob); // Создаём файл в папке

  Logger.log("PDF сохранён в Google Диск: " + file.getUrl()); // Выводим ссылку в лог
}

  • Выбор конкретного листа по названию:
sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Товары");
  • Формирование URL для экспорта в PDF:
    – Чёткое задание формата (format=pdf) и параметров (portrait=true, size=A4).
var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?format=pdf" + "&gid=" + sheetId + "&portrait=true&size=A4";
  • Авторизованный запрос на экспорт PDF:
    – Добавлена авторизация для запроса (Google требует токен).
    – Гарантируется корректное скачивание PDF.
var response = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() } });
  • Создание файла PDF из полученного ответа:
    – Файл создаётся с именем, соответствующим названию листа “Товары.pdf”.
var pdfBlob = response.getBlob().setName(sheet.getName() + ".pdf");
  • Сохранение PDF в указанную папку Google Диска:
    – Теперь файл сохраняется в конкретную папку по её ID.
var folder = DriveApp.getFolderById("1SRzYbiBC73e432uo5WKec46_kxU1PxgH"); 
var file = folder.createFile(pdfBlob);
  • Вывод ссылки на PDF в логи:
    После выполнения кода можно сразу увидеть ссылку на PDF в логах (удобно для проверки).
Logger.log("PDF сохранён в Google Диск: " + file.getUrl());

Вывод:

🔹 Код теперь автоматически экспортирует конкретный лист в PDF и сохраняет в нужную папку.
🔹 Добавлена авторизация для запроса, корректное именование файла и логирование.
🔹 Код полностью автоматизирован и может работать без ручного вмешательства.

✏️ Добавляем отправку PDF на email

Обновляем код:

function exportAndSavePDF() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Товары");
  var sheetId = sheet.getSheetId();
  var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId();

  // Создаём URL-адрес для экспорта в PDF
  var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export?format=pdf" +
            "&gid=" + sheetId + "&portrait=true&size=A4";

  // Отправляем запрос на скачивание PDF
  var response = UrlFetchApp.fetch(url, {
    headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() }
  });

  var pdfBlob = response.getBlob().setName(sheet.getName() + ".pdf"); // Создаём PDF-файл

  // Сохраняем PDF в Google Диск
  var folder = DriveApp.getFolderById("1SRzYbiBC73e432uo5WKec46_kxU1PxgH"); // ID папки Google Диска
  var file = folder.createFile(pdfBlob); // Создаём файл в папке

  Logger.log("PDF сохранён в Google Диск: " + file.getUrl()); // Логирование

  // Окно для ввода email
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt("Введите email", "На какой адрес отправить PDF?", ui.ButtonSet.OK_CANCEL);
  
  if (response.getSelectedButton() == ui.Button.OK) {
    var recipient = response.getResponseText().trim(); // Берём email из ввода пользователя
    if (recipient) {
      var subject = "Автоматически сгенерированный PDF";
      var body = "Во вложении находится PDF-файл с данными из Google Таблицы.";
      
      MailApp.sendEmail({
        to: recipient,
        subject: subject,
        body: body,
        attachments: [pdfBlob]
      });

      Logger.log("PDF отправлен на email: " + recipient);
    } else {
      Logger.log("Email не был введён.");
    }
  } else {
    Logger.log("Отправка PDF отменена.");
  }
}

✅ Теперь перед отправкой появляется окно для ввода email.
✅ Если пользователь нажал “Отмена” или не ввёл email — отправка не выполняется.

Вывод:

В ходе выполнения данной работы был разработан Google Apps Script, который автоматически:
✔ Экспортирует данные из Google Таблицы в формате PDF.
✔ Сохраняет полученный PDF-файл в указанную папку Google Диска.
✔ Запрашивает email у пользователя и отправляет PDF на почту.
✔ Выводит в логах ссылку на сохранённый файл для удобного доступа.

В результате получился полностью автоматизированный процесс, который избавляет от необходимости вручную скачивать, сохранять и отправлять документы. Теперь пользователь может нажимать кнопку в Google Таблице и сразу получать готовый PDF.