Вау !!! Задний грузовик. Есть гораздо более простой подход
За последние несколько недель я немного исследовал это, потому что я планирую сделать то же самое для моих ежемесячных отчетов. У меня пока нет конкретного кода, но я буду добавлять его по мере прогресса.
В Google Docs так много API и подобных терминов, связанных с работой с документами, что это может немного запутать. Если вы еще не знаете, установите в своей голове тот факт, что GAS (Google Apps Scripting) и GAE (Google App Engine) - это две совершенно разные вещи. Хотя они звучат так же, как и Java, они похожи на JavaScript.
GAS - это записи, встроенные в Google Docs (которые, как мы надеемся, в будущем будут импортированы как отдельные модули), которые управляют такими вещами, как проверка и динамические документы, но они намного более мощные, чем большинство подозреваемых (они могут делать такие вещи, как изменять / обновлять внешние документы и автоответчики). Имейте в виду, что они должны быть легкими, потому что они работают на серверах Google. Если ваш сценарий занимает много времени, чтобы завершить его выполнение будет преждевременно оборвано (поискать ограничения можно в Google). Это означает, что вы должны использовать только vanilla JS (без фреймворков, таких как jQuery) и настройки производительности везде, где это возможно.
GAE, с другой стороны, похож на веб-сервер (с доступным слоем базы данных), который живет где-то в облаке. Он существует в качестве удобного (и уже развернутого) уровня промежуточного программного обеспечения для предприятий / интересов для создания пользовательских приложений для более тяжелой работы. К сожалению, внешний API-интерфейс Spreadsheet слишком ограничен, чтобы выполнять то, над чем мы работаем, сам по себе, поэтому это не вариант.
Автоматизация с использованием скриптов Google Apps и триггеров на основе времени
Этот подход должен работать, но требует немного хакерского подхода.
Откройте книгу, содержащую ваши отчеты. Нажмите [Инструменты] -> [Редактор скриптов ...]. Перейдя в [Триггеры] -> [Триггеры текущего скрипта ...].
Если у вас нет триггеров, добавьте один. Затем в раскрывающемся меню «События» выберите «Время-управляемый».
Добро пожаловать в мир серверных обработчиков событий. Одной из полезных функций, которые вы получаете с облачными документами, является возможность запуска заданий cron непосредственно в вашем документе. Внешнее промежуточное программное обеспечение не требуется.
Если вы еще не заметили, нет триггера для «Таймера месяца». Вот где это становится хакерским. Чтобы обойти отсутствие этой функции, потребуется ежедневно запускать триггер и использовать некоторый JavaScript, чтобы сопоставить текущую дату с датой предыдущего дня.
[код будет здесь]
Сначала идет функция, которая присоединяется к обработчику событий триггера времени. Этот блок кода просто анализирует дату, сравнивает ее с предыдущей датой и сохраняет значение в скрытом листе (который мы используем в качестве слоя сохранения) для сравнения на следующий день. Если условие нового месяца выполнено, выполняется следующий блок кода.
[код будет здесь]
Ваш, очевидно, будет немного отличаться от моего, но основная концепция:
- Загрузить объект SpreadSheet (не путать с объектом Sheet)
- Найдите шаблон объекта Sheet
- Клонируйте шаблон листа, присвоив ему соответствующее имя на основе диапазона дат
В моем следующем шаге я буду извлекать данные за месяц, чтобы сгенерировать линейный график с накоплением, чтобы сообщить текущему статусу моих руководителей.
Примечание. Из-за многопользовательской совместной работы над документами события должны запускаться на стороне сервера. Это создает для нас большую проблему. Поскольку код события выполняется в другом месте, если код содержит ошибки, мы не получаем никакой обратной связи от нашего браузера. Единственное решение для этого - настроить уведомление на триггере, чтобы он немедленно отправлял вам электронное письмо при сбое скрипта .
Обновление: во время исследования я нашел еще одну классную технику. Если мне удастся заставить это работать без ошибок, я мог бы попытаться вызвать триггер, используя дату, отмеченную в Календаре Google.