Гид по технологиям

Автоматическая отправка счётов из Google Sheets каждый месяц

7 min read Автоматизация Обновлено 01 Jan 2026
Автоматическая отправка счётов из Google Sheets
Автоматическая отправка счётов из Google Sheets

Важно: скрипты требуют разрешений доступа к Google Sheets и Gmail. Проверяйте адреса получателей и текст сообщения перед автоматизацией.

Что делает этот метод

  • Копирует текущую таблицу (вкладку) и экспортирует её как PDF.
  • Прикрепляет PDF к письму и отправляет на заданный(-ые) адреса.
  • Можно автоматизировать запуск по расписанию (триггер: каждый 1‑й день месяца).

Рекомендации перед началом

  • Держите шаблон вкладки счёта с постоянным именем, например «Invoice» или «Счёт». Скрипт ищет именно эту вкладку. Оптимально: оставлять шаблон с неизменным именем и в начале месяца копировать/переименовывать предыдущий месяц.
  • Проверьте, что все данные счёта видимы на экране и корректно печатаются в PDF (поля, ширина столбцов, скрытые строки).
  • Подумайте о конфиденциальности: адреса клиентов, суммы и почтовые адреса будут обрабатываться скриптом и проходить через вашу учётную запись Google.

google-sheets-teamwork

ALT: Рабочая команда и таблицы в Google Sheets на нескольких экранах


Шаг 1: Подготовьте вкладку с ежемесячным счётом

Лучше иметь один постоянный шаблон, например лист с именем «Invoice» (или «Счёт»). В течение месяца вносите строки с услугами/товарами. В конце месяца скрипт автоматически отправляет именно этот лист.

set up invoice

ALT: Пример настройки шаблона счёта в Google Sheets

Советы:

  • Оставьте фиксированное имя листа, которое будет копироваться и отправляться.
  • Не удаляйте шаблон — после отправки вы можете переименовать отправленный лист в «Март 2026» и создать новый пустой «Invoice».
  • Проверьте предварительный просмотр печати (Файл → Печать), чтобы убедиться в корректности формата PDF.

Шаг 2: Создаём Google Script

  1. В Google Sheets откройте меню ИнструментыРедактор скриптов.
  2. Переименуйте проект скрипта в запоминаемое имя (например «AutoInvoice»).

create google script

ALT: Окно редактора скриптов в Google Sheets

  1. Вставьте следующий код в файл скрипта (файл 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). При первом запуске потребуется предоставить разрешения.

play google script

ALT: Кнопка запуска скрипта в редакторе

Если появится предупреждение безопасности, это связано с тем, что скрипт создан вами и не проходил проверку Google. Вы можете подтвердить доверие и продолжить.

authorize google script

ALT: Окно авторизации доступа скрипта к аккаунту Google

Если всё настроено верно, вы получите письмо с PDF‑вложением, которое содержит вашу таблицу.

automated invoice email

ALT: Пример письма с прикреплённым PDF-счётом


Шаг 3: Автоматизация — триггер по расписанию

Создайте триггер, который будет запускать функцию каждый месяц в заданную дату.

  1. В редакторе скриптов откройте ПравкаТриггеры текущего проекта.

current project triggers

ALT: Список триггеров проекта в Apps Script

  1. Нажмите на ссылку «Нет настроенных триггеров» или кнопку добавления триггера.

setting up trigger

ALT: Создание нового триггера в редакторе скриптов

  1. Выберите тип события: По времени. Установите: Ежемесячно, Первый день месяца (или выберите другой подходящий режим).

После сохранения триггера скрипт будет запускаться автоматически и рассылать PDF в соответствии с настройками.


Шаг 4: Альтернатива без кода — макросы Google Sheets

Если вы предпочитаете не писать код, можно записать макрос — последовательность действий, которая отправляет текущий лист по email.

  1. В листе Invoice откройте ИнструментыМакросыЗаписать макрос.

record google sheets macro

ALT: Запись макроса в Google Sheets

  1. Выполните вручную: Файл → Отправить по электронной почте → Отправить файл как вложение, заполните поля (кому, тема, сообщение) и нажмите Отправить.

email as attachment

ALT: Меню «Отправить как вложение» в Google Sheets

  1. Закончите запись макроса и сохраните имя.

Теперь макрос доступен как функция в файле скрипта (файл macros.gs).

get macro function name

ALT: Просмотр кода макроса и имени функции в редакторе скриптов


Шаг 5: Автоматизация макроса

Макрос можно запускать по расписанию так же, как скрипт:

  1. Откройте ПравкаТриггеры текущего проекта.
  2. В списке функций выберите имя макроса (например myFunction1).
  3. Установите событие по времени: Ежемесячно → 1‑й день.

trigger for macro function

ALT: Выбор функции макроса в списке триггеров

После этого макрос будет выполняться автоматически и отправлять PDF‑вложение тем адресатам, которые вы указали при записи.

set up macro trigger

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.
  • В случае ошибки — уведомление администратору (можно реализовать: отправка логов или запись статуса в таблицу).

Сценарии тестирования

  1. Тестовый запуск с ToUser = ваш email — проверить, что письмо пришло и PDF открывается.
  2. Тест для нескольких получателей (через запятую) — проверить, что все адресаты получили письмо.
  3. Тест формата: длинные строки, спецсимволы, переносы — проверить отображение в PDF.
  4. Тест отказа — отключите доступ к Gmail в настройках учётной записи (симуляция ошибки авторизации) и проверьте обработку ошибки или сообщение в логах.

Мини‑методология: как внедрять автоматизацию ежемесячных задач

  1. Определите повторяющуюся задачу, её входы и желаемый выход (например, PDF‑счёт).
  2. Настройте стабильный шаблон (фиксированное имя листа).
  3. Автоматизируйте отправку простым скриптом или макросом.
  4. Проверяйте и логируйте результаты, добавьте оповещение при ошибках.
  5. Документируйте и обучите коллег.

Роли и обязанности (кто что делает)

  • Владелец счёта: поддерживает шаблон «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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Управление профилями Wi‑Fi в Windows
Сеть

Управление профилями Wi‑Fi в Windows

Вернуть отсутствующий сетевой профиль в Windows 10/11
Windows

Вернуть отсутствующий сетевой профиль в Windows 10/11

Как создать блок-схему в Microsoft Word
Руководство

Как создать блок-схему в Microsoft Word

Как разбить большой CSV/Excel‑файл на несколько файлов
Excel

Как разбить большой CSV/Excel‑файл на несколько файлов

Как разрешить программу через брандмауэр Windows 10
Windows

Как разрешить программу через брандмауэр Windows 10

Запуск Windows в безопасном режиме — руководство
Windows

Запуск Windows в безопасном режиме — руководство