В данной работе рассмотрим, как с помощью скрипта автоматически создавать PDF-файлы из Google Таблиц, а затем отправлять их по email или сохранять в Google Диске.
🔗Ссылку на источник: Как настроить автоматическое создание PDF из Google Таблиц
✏️ Разбор кода и добавление комментариев
Вот пример скрипта, который конвертирует Google Таблицу в PDF (добавленные комментарии поясняют строки кода):
function exportToPDF() {
// Получаем активную электронную таблицу Google Sheets
const sheet = SpreadsheetApp.getActiveSpreadsheet();
// Получаем идентификатор активного листа
const sheetId = sheet.getSheetId();
// Формируем URL для экспорта в PDF
const pdfUrl = `${sheet.getUrl()}/export?format=pdf&gid=${sheetId}`;
// Настройки для HTTP-запроса
const options = {
headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() }, // Добавляем токен авторизации
muteHttpExceptions: true // Отключаем исключения HTTP, чтобы обработать возможные ошибки вручную
};
// Выполняем запрос для получения 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-файла.
📍Проверяем, что создался файл Report.pdf:

✏️ Улучшаем и дорабатываем код
Предварительно создана таблица на листе «Товары» для демонстрации работы кода:

📍Улучшенный код (с комментариями)
// Функция onOpen добавляет новое меню "PDF" в Google Таблицы
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu("PDF")
.addItem("Сохранить на диск в PDF", "savePDFToDrive") // Добавляем опцию сохранения в Google Диск
.addItem("Отправить PDF на email", "exportAndSendPDF") // Добавляем опцию отправки на email
.addToUi();
}
// Функция для сохранения PDF в Google Диск (только лист "Товары")
function savePDFToDrive() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Товары");
// Проверяем, существует ли лист "Товары"
if (!sheet) {
SpreadsheetApp.getUi().alert("Ошибка: Лист 'Товары' не найден.");
return;
}
// Генерируем PDF-файл
var pdfBlob = generatePDF(sheet);
if (!pdfBlob) return;
// ID папки в Google Диске, куда будет сохранён файл
var folderId = "1SRzYbiBC73e432uo5WKec46_kxU1PxgH";
var folder = DriveApp.getFolderById(folderId);
var file = folder.createFile(pdfBlob); // Создаём файл в указанной папке
// Выводим сообщение пользователю и логируем ссылку на файл
SpreadsheetApp.getUi().alert("PDF с листом 'Товары' сохранён в Google Диск.\nСсылка: " + file.getUrl());
Logger.log("PDF сохранён: " + file.getUrl());
}
// Функция для экспорта PDF и отправки на email
function exportAndSendPDF() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Товары");
// Проверяем, существует ли лист "Товары"
if (!sheet) {
SpreadsheetApp.getUi().alert("Ошибка: Лист 'Товары' не найден.");
return;
}
// Генерируем PDF-файл
var pdfBlob = generatePDF(sheet);
if (!pdfBlob) return;
// Запрашиваем у пользователя email
var ui = SpreadsheetApp.getUi();
var response = ui.prompt("Введите email", "Введите один или несколько адресов через запятую", ui.ButtonSet.OK_CANCEL);
// Проверяем, нажал ли пользователь кнопку "ОК"
if (response.getSelectedButton() == ui.Button.OK) {
var recipient = response.getResponseText().trim();
// Если email введён, обрабатываем его
if (recipient) {
var emails = recipient.split(",").map(email => email.trim()).filter(email => email); // Разделяем адреса по запятой
// Настраиваем письмо
var subject = "Отчёт в PDF – Данные из Google Таблицы";
var body = "Здравствуйте!\n\n" +
"Во вложении находится автоматически сгенерированный PDF-файл с актуальными данными из Google Таблицы.\n\n" +
"Если у вас есть вопросы или пожелания, не стесняйтесь обращаться.\n\n" +
"С уважением,\nРазработчик ПО";
// Отправляем письмо с вложением
MailApp.sendEmail({
to: emails.join(","), // Отправляем сразу нескольким адресатам
subject: subject,
body: body,
attachments: [pdfBlob],
name: "Разработчик ПО" // Указываем имя отправителя
});
// Сообщаем пользователю, что письмо отправлено
ui.alert("PDF отправлен на email(ы): " + emails.join(", "));
Logger.log("PDF отправлен на email(ы): " + emails.join(", "));
} else {
ui.alert("Вы не ввели email. Отправка отменена.");
}
} else {
ui.alert("Отправка PDF отменена.");
}
}
// Функция для генерации PDF-файла с листа "Товары"
function generatePDF(sheet) {
try {
var sheetId = sheet.getSheetId();
var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId();
// Формируем URL для экспорта листа в PDF
var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId +
"/export?exportFormat=pdf&format=pdf" +
"&gid=" + sheetId + // Экспортируем только конкретный лист
"&portrait=true&size=A4" + // Ориентация и размер страницы
"&top_margin=0.5&bottom_margin=0.5&left_margin=0.5&right_margin=0.5" + // Устанавливаем отступы
"&gridlines=false&printtitle=false"; // Отключаем сетку и заголовок
// Делаем запрос к URL для получения PDF
var response = UrlFetchApp.fetch(url, {
headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() }
});
// Возвращаем PDF-файл в виде Blob
return response.getBlob().setName(sheet.getName() + ".pdf");
} catch (e) {
// Если произошла ошибка, уведомляем пользователя и логируем её
SpreadsheetApp.getUi().alert("Ошибка при экспорте PDF: " + e.toString());
Logger.log("Ошибка при экспорте PDF: " + e.toString());
return null;
}
}
Что улучшено в коде?
✅ Добавлено меню в Google Таблицы.
✅ Экспорт PDF и сохранение на Google Диск.
✅ Отправка PDF нескольким email одновременно.
✅ Добавлен формат письма (тема, тело, вложение).
✅ Добавлены уведомления и логирование.
Этот код на Google Apps Script выполняет следующие задачи:
1. Добавление меню PDF в Google Таблицы:

В меню есть два пункта:
- «Сохранить на диск в PDF» – экспортирует лист «Товары» в PDF и сохраняет в Google Диск.
- «Отправить PDF на email» – экспортирует лист «Товары» в PDF и отправляет его на email.
2. Экспорт листа «Товары» в PDF и сохранение на Google Диск (💾 «Сохранить на диск в PDF»):

Проверяю на своём Google Диске, что файл сохранён:

3. Экспорт листа «Товары» в PDF и отправка на email (📩«Отправить PDF на email»):
В коде прописана возможность отправлять письмо с вложением нескольким пользователям одновременно. Тестируем:

Использую две свои почты, ввести их нужно через запятую (указано в самой форме):

📬 Проверяю свои «электронные ящики»:
В коде я замаскировала свою почту (почту отправителя) под имя «Разработчик ПО» и письмо выглядит вот таким образом:

Вот так выглядит содержание письма на одном email:

И на втором email:
