Автоматическая отправка счётов из Google Sheets каждый месяц
Важно: скрипты требуют разрешений доступа к Google Sheets и Gmail. Проверяйте адреса получателей и текст сообщения перед автоматизацией.
Что делает этот метод
- Копирует текущую таблицу (вкладку) и экспортирует её как PDF.
- Прикрепляет PDF к письму и отправляет на заданный(-ые) адреса.
- Можно автоматизировать запуск по расписанию (триггер: каждый 1‑й день месяца).
Рекомендации перед началом
- Держите шаблон вкладки счёта с постоянным именем, например «Invoice» или «Счёт». Скрипт ищет именно эту вкладку. Оптимально: оставлять шаблон с неизменным именем и в начале месяца копировать/переименовывать предыдущий месяц.
- Проверьте, что все данные счёта видимы на экране и корректно печатаются в PDF (поля, ширина столбцов, скрытые строки).
- Подумайте о конфиденциальности: адреса клиентов, суммы и почтовые адреса будут обрабатываться скриптом и проходить через вашу учётную запись Google.

ALT: Рабочая команда и таблицы в Google Sheets на нескольких экранах
Шаг 1: Подготовьте вкладку с ежемесячным счётом
Лучше иметь один постоянный шаблон, например лист с именем «Invoice» (или «Счёт»). В течение месяца вносите строки с услугами/товарами. В конце месяца скрипт автоматически отправляет именно этот лист.
ALT: Пример настройки шаблона счёта в Google Sheets
Советы:
- Оставьте фиксированное имя листа, которое будет копироваться и отправляться.
- Не удаляйте шаблон — после отправки вы можете переименовать отправленный лист в «Март 2026» и создать новый пустой «Invoice».
- Проверьте предварительный просмотр печати (Файл → Печать), чтобы убедиться в корректности формата PDF.
Шаг 2: Создаём Google Script
- В Google Sheets откройте меню Инструменты → Редактор скриптов.
- Переименуйте проект скрипта в запоминаемое имя (например «AutoInvoice»).
ALT: Окно редактора скриптов в Google Sheets
- Вставьте следующий код в файл скрипта (файл Code.gs или аналогичный). Замените значение ToUser на ваш тестовый email и заполните текст письма по шаблону.
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var filename = "Current Month " + ss.getName();
var SendBook = ss.copy(filename);
var ToUser = "xxxxx@gmail.com";
MailApp.sendEmail({
to: ToUser,
subject: 'Here is my invoice for last month!',
body: 'Hi! I have attached my invoice for this month. Thanks for the work, really appreciate it! -Ryan',
attachments: [SendBook.getBlob().setName(filename)]
});
}Примечания по коду:
- ss.getActiveSpreadsheet() — текущая рабочая книга.
- ss.copy(filename) создаёт копию всей книги; если нужно отправлять только одну вкладку, есть альтернативы в разделе «Альтернативные подходы».
- MailApp.sendEmail отправляет сообщение от вашей учётной записи.
Тестирование скрипта
- Вставьте в ToUser свой адрес, нажмите значок «Сохранить», затем «Выполнить» (Play). При первом запуске потребуется предоставить разрешения.
ALT: Кнопка запуска скрипта в редакторе
Если появится предупреждение безопасности, это связано с тем, что скрипт создан вами и не проходил проверку Google. Вы можете подтвердить доверие и продолжить.
ALT: Окно авторизации доступа скрипта к аккаунту Google
Если всё настроено верно, вы получите письмо с PDF‑вложением, которое содержит вашу таблицу.
ALT: Пример письма с прикреплённым PDF-счётом
Шаг 3: Автоматизация — триггер по расписанию
Создайте триггер, который будет запускать функцию каждый месяц в заданную дату.
- В редакторе скриптов откройте Правка → Триггеры текущего проекта.
ALT: Список триггеров проекта в Apps Script
- Нажмите на ссылку «Нет настроенных триггеров» или кнопку добавления триггера.
ALT: Создание нового триггера в редакторе скриптов
- Выберите тип события: По времени. Установите: Ежемесячно, Первый день месяца (или выберите другой подходящий режим).
После сохранения триггера скрипт будет запускаться автоматически и рассылать PDF в соответствии с настройками.
Шаг 4: Альтернатива без кода — макросы Google Sheets
Если вы предпочитаете не писать код, можно записать макрос — последовательность действий, которая отправляет текущий лист по email.
- В листе Invoice откройте Инструменты → Макросы → Записать макрос.
ALT: Запись макроса в Google Sheets
- Выполните вручную: Файл → Отправить по электронной почте → Отправить файл как вложение, заполните поля (кому, тема, сообщение) и нажмите Отправить.
ALT: Меню «Отправить как вложение» в Google Sheets
- Закончите запись макроса и сохраните имя.
Теперь макрос доступен как функция в файле скрипта (файл macros.gs).
ALT: Просмотр кода макроса и имени функции в редакторе скриптов
Шаг 5: Автоматизация макроса
Макрос можно запускать по расписанию так же, как скрипт:
- Откройте Правка → Триггеры текущего проекта.
- В списке функций выберите имя макроса (например myFunction1).
- Установите событие по времени: Ежемесячно → 1‑й день.
ALT: Выбор функции макроса в списке триггеров
После этого макрос будет выполняться автоматически и отправлять PDF‑вложение тем адресатам, которые вы указали при записи.
ALT: Настройка ежемесячного триггера для макроса
Альтернативные подходы и когда этот метод не подходит
- Если нужно отправлять не всю книгу, а только одну вкладку, копирование всей книги может быть избыточным. В этом случае экспортируйте конкретный лист в PDF через API или формируйте PDF с помощью HTML-шаблона и UrlFetchApp.
- Для корпоративных сценариев с множеством клиентов лучше использовать серверные решения (например, Apps Script + Google Cloud Functions) с управлением квот и логированием.
- Если получатели не используют Gmail, PDF — хорошая идея; если нужен структурированный экспорт (CSV, XML), используйте Drive API.
Безопасность и соответствие конфиденциальности
- Скрипт запускается из вашей учётной записи и имеет доступ к данным в Google Drive и Gmail:
- Минимизируйте хранение чувствительных данных прямо в таблице.
- Помните о политике клиента по хранению финансовых данных и возможных требованиях GDPR.
- Проверяйте и ревьювайте код перед добавлением триггеров. Для корпоративной учётной записи согласуйте с ИТ при необходимости.
Чеклист внедрения (быстрое руководство)
- Назвать шаблон вкладки фиксированным именем (например “Invoice”).
- Убедиться, что макет правильно печатается в PDF (предварительный просмотр).
- Вставить и отладить скрипт/макрос, отправить тест на свой почтовый адрес.
- Настроить триггер: Ежемесячно → 1‑е число.
- Провести тестовый запуск и проверить письмо/вложение.
- Документировать адреса рассылки и шаблон письма.
Критерии приёмки
- Скрипт/макрос запускается вручную без ошибок и отправляет письмо с прикреплённым PDF.
- Триггер запускается в назначенную дату и время (проверено в логах триггеров).
- Получатель(и) получают файл корректного формата и читаемый PDF.
- В случае ошибки — уведомление администратору (можно реализовать: отправка логов или запись статуса в таблицу).
Сценарии тестирования
- Тестовый запуск с ToUser = ваш email — проверить, что письмо пришло и PDF открывается.
- Тест для нескольких получателей (через запятую) — проверить, что все адресаты получили письмо.
- Тест формата: длинные строки, спецсимволы, переносы — проверить отображение в PDF.
- Тест отказа — отключите доступ к Gmail в настройках учётной записи (симуляция ошибки авторизации) и проверьте обработку ошибки или сообщение в логах.
Мини‑методология: как внедрять автоматизацию ежемесячных задач
- Определите повторяющуюся задачу, её входы и желаемый выход (например, PDF‑счёт).
- Настройте стабильный шаблон (фиксированное имя листа).
- Автоматизируйте отправку простым скриптом или макросом.
- Проверяйте и логируйте результаты, добавьте оповещение при ошибках.
- Документируйте и обучите коллег.
Роли и обязанности (кто что делает)
- Владелец счёта: поддерживает шаблон «Invoice», проверяет данные до 1‑го числа.
- Администратор скрипта: настраивает скрипт/макрос и триггер, проверяет авторизации.
- Получатель/клиент: подтверждает получение и корректность счёта.
Небольшой справочник терминов
- Скрипт: небольшой фрагмент кода на Google Apps Script, выполняющий действия в Google сервисах.
- Триггер: расписание или событие, которое запускает скрипт автоматически.
- Макрос: записанная последовательность действий в Google Sheets, затем исполняемая как функция.
Частые проблемы и способы их устранения
- Не приходит письмо после запуска вручную: проверьте логи скрипта (Просмотр → Журнал исполнения) и права доступа.
- Скрипт запрашивает авторизацию при каждом запуске: убедитесь, что используете одну и ту же учётную запись и корректно сохранили проект.
- PDF выглядит неправильно: настройте параметры печати в Google Sheets (Файл → Печать) и убедитесь, что область печати охватывает нужные ячейки.
Пример расширения: логирование отправок в отдельный лист
Чтобы отслеживать, когда и кому отправлялись счета, можно добавить запись в лист “Logs” внутри той же книги.
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var filename = "Current Month " + ss.getName();
var SendBook = ss.copy(filename);
var ToUser = "xxxxx@gmail.com";
MailApp.sendEmail({
to: ToUser,
subject: 'Here is my invoice for last month!',
body: 'Hi! I have attached my invoice for this month. Thanks for the work, really appreciate it! -Ryan',
attachments: [SendBook.getBlob().setName(filename)]
});
try {
var logSheet = ss.getSheetByName('Logs') || ss.insertSheet('Logs');
logSheet.appendRow([new Date(), ToUser, filename, 'sent']);
} catch (e) {
Logger.log('Error logging sending: ' + e);
}
}Дерево решений при выборе метода
flowchart TD
A[Нужно отправлять счёт автоматически?] -->|Да| B{Требуется код?
}
B -->|Нет, хочу без кода| C[Использовать макрос и триггер]
B -->|Да, нужен гибкий контроль| D[Использовать Apps Script]
D --> E{Требуется отправлять весь файл или одну вкладку?}
E -->|Весь файл| F[Использовать ss.copy + sendEmail]
E -->|Одна вкладка| G[Экспортировать одну вкладку в PDF через UrlFetchApp или формировать PDF из HTML]
A -->|Нет| H[Оставить ручную отправку]Итоги
- Автоматизация рассылки счетов из Google Sheets простая и экономит время.
- Можно выбрать между скриптом и макросом в зависимости от уровня комфорта с кодом.
- Обязательно проведите тесты и настройте логирование/оповещения на случай ошибок.
Если хотите, могу помочь адаптировать скрипт под ваш шаблон счёта (покажите пример таблицы) или сделать вариант, который экспортирует только одну вкладку в PDF.
Похожие материалы
Управление профилями Wi‑Fi в Windows
Вернуть отсутствующий сетевой профиль в Windows 10/11
Как создать блок-схему в Microsoft Word
Как разбить большой CSV/Excel‑файл на несколько файлов
Как разрешить программу через брандмауэр Windows 10