- Как автоматически отправлять отчёты по почте через Google Apps Script — пошаговое руководство для реальных задач
- Что тебе нужно, чтобы начать
- Шаг 1: Подготовь таблицу с данными
- Шаг 2: Открой редактор скриптов
- Шаг 3: Настрой расписание
- Что можно менять — и как
- 1. Другой день недели
- 2. Другой формат отчёта
- 3. Отправка только определённым людям
- 4. Добавить статистику
- Что часто ломает скрипт — и как этого избежать
- Когда использовать этот способ — и когда нет
- Как сделать идеально — 5 рекомендаций от практика
- Что выбрать: HTML, PDF или оба?
- Что делать дальше
Как автоматически отправлять отчёты по почте через Google Apps Script — пошаговое руководство для реальных задач
Представь: каждый понедельник утром тебе нужно собрать данные из Google Таблицы, оформить их в красивый отчёт, прикрепить как PDF и отправить трём менеджерам. Это занимает 20–30 минут. Плюс ты забываешь иногда. Или кто-то из коллег ждёт отчёт, а ты в звонке. А если таких отчётов — пять в неделю? Сколько времени уйдёт за месяц? 20 часов? А если ты не один — целая команда тратит на это время, которое можно потратить на что-то важнее.
Google Apps Script — это бесплатный инструмент внутри Google Workspace, который позволяет автоматизировать рутину. Я не говорю про «надо бы», я говорю про то, как это сделать на практике — так, чтобы через час после старта у тебя уже был работающий скрипт, который отправляет отчёты сам.
Что тебе нужно, чтобы начать
Ты не должен быть программистом. Тебе не нужен сервер, хостинг или API-ключи. Тебе нужно только:
- Google-аккаунт (рабочий или личный — неважно);
- Таблица с данными (например, продажи за неделю);
- Почта получателей (в той же таблице или вручную в скрипте);
- 15–30 минут времени.
Всё остальное — Google сделает за тебя. Скрипт будет работать в облаке, даже если твой компьютер выключен.
Шаг 1: Подготовь таблицу с данными
Открой Google Таблицы и создай новый файл. Пример структуры — простой, но рабочий:
| Дата | Продажи | Клиенты | Ответственный | Почта получателя |
|---|---|---|---|---|
| 01.04.2024 | 142 500 ₽ | 37 | Иван Петров | ivan.petrov@company.com |
| 08.04.2024 | 168 900 ₽ | 41 | Мария Сидорова | m.sidorova@company.com |
| 15.04.2024 | 131 200 ₽ | 33 | Алексей Козлов | a.kozlov@company.com |
Это твой источник данных. Важно: не используй пустые строки между заголовками и данными — скрипт может их не увидеть. Также убедись, что в столбце с почтами нет опечаток. Одна ошибка — и письмо не дойдёт.
Шаг 2: Открой редактор скриптов
В таблице нажми: Расширения → Apps Script. Откроется пустой редактор. Удали всё, что там есть (если оно есть), и вставь этот код:
function sendWeeklyReport() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
// Берём данные из первой строки (заголовки) и до последней
const data = sheet.getRange(2, 1, lastRow - 1, 5).getValues(); // строки 2–последняя, столбцы 1–5
// Формируем тело письма
let emailBody = `
Еженедельный отчёт
Вот данные за неделю:
Дата
Продажи
Клиенты
Ответственный
`;
data.forEach(row => {
emailBody += `
${row[0]}
${row[1]}
${row[2]}
${row[3]}
`;
});
emailBody += `
С уважением, автоматизированный отчёт.
`;
// Отправляем письмо каждому получателю
data.forEach(row => {
const recipientEmail = row[4];
if (recipientEmail && recipientEmail.includes('@')) {
MailApp.sendEmail({
to: recipientEmail,
subject: 'Еженедельный отчёт — ' + row[0],
htmlBody: emailBody
});
}
});
Logger.log('Отчёты отправлены: ' + data.length + ' писем');
} Этот код:
- Читает все строки с данными (кроме заголовков);
- Собирает HTML-таблицу из этих данных;
- Отправляет письмо каждому, чья почта указана в столбце E;
- Логирует результат — можно посмотреть в меню Просмотр → Журналы.
Не пугайся, что это HTML — ты не пишешь его с нуля. Просто копируешь, вставляешь, и всё работает.
Шаг 3: Настрой расписание
Теперь скрипт работает, но только если ты его запустишь вручную. А ты хочешь, чтобы он работал сам. Нажми на Триггеры (иконка с часами в левом боковом меню).
Нажми + Добавить триггер. Выбери:
- Функция: sendWeeklyReport
- Тип триггера: Время — Еженедельно
- Время: Понедельник, 8:00
Сохрани. Теперь каждый понедельник в 8:00 по твоему часовому поясу скрипт запустится сам. Даже если ты спишь.
Что можно менять — и как
Ты не обязан копировать этот код точно. Вот что можно адаптировать под себя:
1. Другой день недели
В триггере выбери не «понедельник», а «вторник» или «пятница». Или даже «каждый день в 9:00» — если отчёты ежедневные.
2. Другой формат отчёта
Вместо HTML-таблицы можно отправить PDF. Для этого добавь в код:
// Добавь перед MailApp.sendEmail:
const pdfBlob = SpreadsheetApp.getActiveSpreadsheet().getAs('application/pdf').setName('Отчёт_за_неделю.pdf');
// И в MailApp.sendEmail добавь:
attachments: [pdfBlob] Теперь письмо приходит с прикреплённым PDF-файлом. Но: PDF создаётся для всей таблицы, а не только для данных. Если у тебя много листов — это может быть неудобно. Тогда лучше использовать только HTML.
3. Отправка только определённым людям
Если ты хочешь, чтобы отчёт шёл только менеджерам, а не всем, можно добавить фильтр:
const managers = ['ivan.petrov@company.com', 'm.sidorova@company.com'];
data.forEach(row => {
const recipientEmail = row[4];
if (recipientEmail && managers.includes(recipientEmail)) {
MailApp.sendEmail({ ... });
}
}); Так ты точно не отправишь отчёт случайно бухгалтеру или внешнему подрядчику.
4. Добавить статистику
Хочешь, чтобы в письме было: «Всего продаж: 442 600 ₽»? Добавь это перед таблицей:
const totalSales = data.reduce((sum, row) => sum + (row[1] || 0), 0);
emailBody = `
Еженедельный отчёт
Всего продаж за неделю: ${totalSales} ₽
Вот детали:
... И всё будет считаться автоматически. Никаких ручных подсчётов.
Что часто ломает скрипт — и как этого избежать
Я видел десятки таких случаев. Вот основные ошибки, которые мешают работе:
- Почта не в формате email — например, «Иван Петров» вместо «ivan.petrov@company.com». Скрипт не проверяет, есть ли @ — просто отправляет. И письмо не доходит. Решение: добавь в код проверку
if (recipientEmail && recipientEmail.includes('@')). - Слишком много данных — если таблица больше 10 000 строк, скрипт может не успеть обработать всё. Google ограничивает время выполнения на 6 минут. Решение: разбей отчёт на недельные листы или фильтруй только последние 100 строк.
- Нет доступа к почте — если ты используешь корпоративный аккаунт, администратор может отключить отправку писем через скрипты. Проверь в Админ-консоли Google Workspace → Безопасность → Доступ к API.
- Изменённая структура таблицы — ты добавил столбец «Прибыль», и теперь почта оказалась не в столбце E, а в F. Скрипт всё ещё смотрит на 5-й столбец — и получает пустоту. Решение: всегда проверяй номер столбца в
getRange(2, 1, ...)— цифры должны соответствовать реальным колонкам. - Скрипт не запускается — ты забыл сохранить триггер. Или удалил его. Проверяй триггеры раз в месяц — они не исчезают сами, но иногда их «сбивает» обновление Google.
Когда использовать этот способ — и когда нет
Этот метод отлично работает, если:
- Данные лежат в Google Таблицах;
- Получатели — сотрудники с корпоративной почтой;
- Отчёт не требует сложной визуализации (графики, диаграммы);
- Ты не хочешь платить за сторонние сервисы (Zapier, Make, Power Automate).
А вот если:
- Тебе нужно отправлять отчёты клиентам с личной почтой (Gmail, Яндекс, Mail.ru) — всё равно работает;
- Ты хочешь вставлять в письмо графики — лучше использовать Google Data Studio (Looker Studio) и отправлять PDF оттуда;
- Ты отправляешь отчёты 100+ людям в день — Google может заблокировать аккаунт за спам. Лимит: 100 писем в день для личного аккаунта, 1 500 для Google Workspace. Не перегружай.
- Отчёт требует подписи, печати, юридической формы — лучше использовать шаблоны в Word или специализированные CRM.
Как сделать идеально — 5 рекомендаций от практика
- Тестируй на одном человеке — перед тем как включить триггер на всех, запусти скрипт вручную и отправь себе письмо. Проверь, как выглядит HTML, есть ли опечатки, правильно ли подставлены цифры.
- Сделай резервную копию таблицы — если ты случайно удалишь столбец с почтами, скрипт может начать слать письма на пустые адреса. Создай копию с названием «Отчёт_на_само_тестирование».
- Используй логи — после запуска открой Просмотр → Журналы. Там ты увидишь, сколько писем отправлено. Если 0 — значит, что-то пошло не так.
- Не пиши письма с «Уважаемый» — если ты знаешь имя получателя, вставляй его:
Привет, ${row[3]}!. Это повышает открытие писем. Люди не любят шаблоны. - Запомни: это не CRM — если тебе нужно отслеживать, кто открыл письмо, кто ответил, кто не прочитал — это уже задача для почтовых сервисов вроде Mailchimp или SendGrid. Apps Script — для простых, автоматических задач.
Что выбрать: HTML, PDF или оба?
Если ты только начинаешь — начни с HTML. Он:
- Загружается мгновенно;
- Отображается в любом почтовом клиенте;
- Легко редактируется;
- Не требует дополнительных действий.
PDF нужен, если:
- Ты отправляешь отчёт руководству, и они требуют «официальный формат»;
- Ты хочешь, чтобы отчёт нельзя было легко скопировать;
- Ты включаешь в отчёт несколько листов таблицы.
Вот сравнение:
| Параметр | HTML | |
|---|---|---|
| Скорость отправки | Секунды | 5–15 секунд (генерация) |
| Размер письма | Маленький | Большой (100–500 КБ) |
| Редактирование | Легко — просто меняй код | Трудно — нужно перегенерировать |
| Поддержка в почте | Все клиенты | Некоторые мобильные клиенты не отображают встроенный PDF |
| Подходит для | Ежедневные отчёты, команды | Отчёты для руководства, аудит |
Если ты не уверен — начни с HTML. Потом, когда поймёшь, как это работает, добавь PDF как дополнительный вариант.
Что делать дальше
Ты только что автоматизировал рутину, которая отнимала у тебя 2–3 часа в неделю. Это не «маленькая победа» — это смена подхода. Теперь ты не тратишь время на то, что может сделать машина.
Следующий шаг — расширить эту систему. Например:
- Собирать отчёты из нескольких таблиц — объединить продажи, расходы, поддержку;
- Отправлять уведомления, если продажи упали ниже порога — добавь условие
if (totalSales < 100000) { ... }; - Сохранять копии отчётов в Google Диск — добавь
DriveApp.createFile(); - Связать с Google Forms — если клиенты заполняют форму, автоматически генерировать отчёт по итогам дня.
Но не спешить. Сначала убедись, что твой текущий скрипт работает стабильно. Проверь его трижды: вручную, через триггер, на следующей неделе. Если всё работает — ты сделал всё правильно.
Попробуй. Запусти. Через неделю ты будешь смотреть на свои старые отчёты и думать: «Как я раньше жил без этого?»
Информация в этой статье носит ознакомительный характер. Автоматизация процессов может влиять на корпоративные процессы и соблюдение политик безопасности. Перед внедрением убедитесь, что это соответствует внутренним регламентам вашей организации.


