Автоматическая почасовая отправка Google Sheets-отчёта в XLSX по email
Google Apps Script-автоматизация, которая каждый час экспортирует Google Таблицу в XLSX-файл и отправляет его на заданные email-адреса.

Слайд 1 из 2
ОПИСАНИЕ
Проект реализован как скрипт Google Apps Script для автоматической почасовой отправки отчёта из Google Sheets в формате Excel. В коде используется ID Google Таблицы, список получателей, имя итогового файла, тема письма и флаг режима отправки, который определяет, нужно ли запускать рассылку ровно в начале каждого часа.
Экспорт и отправка отчёта
Основная функция отправки `doSend_()` открывает Google Таблицу по `SHEET_ID`, формирует URL экспорта через стандартный endpoint Google Sheets `/export?format=xlsx`, получает XLSX-файл через `UrlFetchApp.fetch()` и авторизует запрос OAuth-токеном текущего скрипта через `ScriptApp.getOAuthToken()`. Полученный ответ преобразуется в blob, файлу задаётся имя `KSclay.xlsx`, после чего он отправляется через `MailApp.sendEmail()` как вложение двум получателям.
Расписание по триггерам
Для расписания реализована отдельная логика управления time-based триггерами. Функция `nextTopOfHour_()` вычисляет ближайший следующий ровный час: сбрасывает минуты, секунды и миллисекунды до нуля, а если рассчитанное время уже прошло или совпадает с текущим моментом, переносит запуск на следующий час. Это позволяет не использовать приблизительный `everyHours(1)` в режиме точной отправки, а каждый раз создавать одноразовый триггер на конкретное время.
Структура и очистка триггеров
Архитектура скрипта разделена на несколько служебных функций: отправка письма, расчёт следующего запуска, очистка триггеров, проверка существующих триггеров, настройка расписания, обработчик почасового запуска и ручной тест. Для предотвращения дублей предусмотрена очистка только связанных со скриптом триггеров через `clearOurTriggers_()`. Она удаляет обработчики `tick_`, `doSend_` и старые обработчики, начинающиеся с `sendAt_`. Также есть отдельная аварийная функция `wipeAllTriggers()`, которая удаляет все триггеры проекта целиком.
Режим точной отправки
В режиме `EXACT_ON_THE_HOUR = true` используется обработчик `tick_()`. Он выполняет отправку отчёта через `doSend_()`, а затем в блоке `finally` удаляет текущие триггеры `tick_` и создаёт новый одноразовый триггер на следующий ровный час. Такой подход гарантирует, что переназначение следующего запуска произойдёт даже в случае ошибки внутри отправки, насколько это позволяет выполнение блока `finally`.
Первичная настройка и тест
Для первичной настройки используется функция `setupOnce()`: её нужно запустить вручную один раз, чтобы скрипт поставил первый триггер. Для ручной проверки предусмотрена функция `testNow()`, которая сразу вызывает отправку письма без ожидания расписания. В коде нет внешних npm-зависимостей, package.json, базы данных, пользовательского интерфейса или отдельного слоя данных; проект полностью построен на встроенных сервисах Google Apps Script.
ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ
- Google Apps Script
- JavaScript
- Google Sheets API export endpoint
- SpreadsheetApp
- UrlFetchApp
- ScriptApp
- MailApp
- time-based triggers
- OAuth token Google Apps Script
РЕЗУЛЬТАТ
- Реализована автоматическая отправка Google Таблицы в формате XLSX на несколько email-адресов.
- Настроен экспорт Google Sheets через `/export?format=xlsx` с авторизацией OAuth-токеном скрипта.
- Реализована отправка Excel-файла как email-вложения через `MailApp.sendEmail()`.
- Добавлен режим отправки ровно в 00 минут каждого часа через одноразовые time-based триггеры.
- Реализован расчёт ближайшего следующего ровного часа для точного планирования запусков.
- Добавлена автоматическая пересборка триггера после каждого выполнения обработчика `tick_()`.
- Предусмотрена очистка старых и дублирующихся триггеров, связанных с этим скриптом.
- Добавлена аварийная функция полной очистки триггеров проекта.
- Добавлена функция ручной инициализации расписания `setupOnce()`.
- Добавлена функция ручной тестовой отправки `testNow()` без ожидания следующего часа.
AI АССИСТЕНТ
Задать вопрос по этой работе