Этот репозиторий содержит код для Google Apps Script, который автоматизирует управление и обслуживание набора Google Таблиц, используемых сообществом чата @google_sheets_pro.
Сам скрипт развернут как проект Скрипты Таблицы чата t.me/google_sheets_pro [master].
- Ежемесячное создание новой таблицы: Автоматически создает копию текущей таблицы, сбрасывает ее до начального состояния и обновляет соответствующие настройки.
- Очистка от Google Forms: Автоматически отвязывает и удаляет все Google Формы, связанные с листами, при создании новой таблицы.
- Веб-сервис (REST API): Предоставляет простой REST API для получения ID текущей активной таблицы. Это позволяет другим скриптам и сервисам интегрироваться с системой.
- Управление содержанием: Динамически генерирует и обновляет оглавление на главной странице таблицы.
- Сортировка листов: Организует листы в определенном порядке: сначала закрепленные (из списка исключений), затем защищенные, и в конце все остальные.
- Гибкая настройка: Все основные параметры, такие как ID папок, списки исключений и права доступа, хранятся в настройках скрипта (Script Properties).
- Пользовательские функции: Предоставляет кастомные функции, которые можно вызывать из редактора Скриптов для выполнения различных административных задач.
- Автоматические триггеры: Использует триггеры для выполнения задач по расписанию (ежемесячно, ежечасно).
- Использование как библиотеки: Основной функционал инкапсулирован в классе
Appи может быть подключен как библиотека в других проектах Google Apps Script.
src/App/index.js: Основной классApp, содержащий всю бизнес-логику.src/App/types.js: Определения типов JSDoc для улучшения читаемости кода.src/Triggers/index.js: Функции, предназначенные для запуска по триггерам (например,triggerUpdateEveryMonth).src/Custom/index.js: Пользовательские функции, доступные редактора Скриптов (например,userActionGenerateTOC).src/Tests/: Тестовые функции для проверки работоспособности отдельных частей кода.appsscript.json: Манифест проекта, определяющий зависимости и настройки.gulpfile.js,package.json: Файлы для сборки проекта с использованиемgulpиclasp.
Реализует веб-сервис, который отвечает на GET и POST запросы. Основное назначение - вернуть ID текущей активной таблицы чата по запросу от другого сервиса. Для аутентификации используется ADMIN_ACCESS_TOKEN.
Создает новую таблицу для следующего месяца. Копирует текущую, отвязывает старые Google Формы, обновляет права доступа, сбрасывает содержимое, создает новый пустой лист и генерирует оглавление.
Сортирует листы. Листы из APP_LIST_OF_EXEPTIONS_SHEETS всегда идут первыми, затем листы с защитой от редактирования, затем все остальные.
Создает или обновляет оглавление на листе "О Таблице". Собирает ссылки на все листы, кроме тех, что в списке исключений, и добавляет значок замка 🔏 для защищенных листов.
Триггер, который раз в месяц запускает App.createNextBook().
Триггер ежечасного обновления Таблицы. Добавляет новый пустой лист, сортирует листы и обновляет оглавление.
Триггер ежеминутного обновления Таблицы. Используется для отмены.
- Клонируйте репозиторий.
- Установите зависимости:
npm install - Настройте
clasp: Войдите в свой Google-аккаунт (clasp login) и создайте новый проект Apps Script (clasp create --title "Ваше название проекта" --rootDir ./build). - Настройте свойства скрипта: В редакторе Apps Script (Файл -> Свойства проекта -> Свойства скрипта) добавьте следующие переменные:
APP_CURRENT_FILE_NUM: Номер последней созданной таблицы.APP_CURRENT_ID: ID текущей активной таблицы.APP_FOLDER_ID: ID папки на Google Диске, где хранятся все таблицы.APP_LIST_OF_EXEPTIONS_SHEETS: JSON-массив в виде строки с именами листов, которые нужно исключить из некоторых операций (например,["О Таблице"]).APP_MASTER_EDITOR: Email-адрес главного редактора.APP_EXPERTS_EDITOR: Email-адреса экспертов через запятую.ADMIN_ACCESS_TOKEN: Секретный токен для доступа к API.
- Разверните проект:
npm run dev
- Автоматическое обновление: Триггеры будут выполняться автоматически согласно их расписанию.
- Ручной запуск: Вы можете запускать пользовательские функции из
src/Custom/index.jsнепосредственно из редактора Скриптов.