Last active
December 14, 2020 14:08
-
-
Save cooltables/1b83e7a4ef1ff57b8631254e3076b8cc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ************************************************************************************************************************************ | |
// ** Добро пожаловать в пример скрипта! ** | |
// ** Скрипт создаёт отчёты по шаблону. Cкопируйте себе шаблон: ** | |
// ** https://docs.google.com/spreadsheets/d/1aRfj-7Ytl9dTCN_nRK7WfxJNgbrLDCCr_enhtLAzQ2M/copy ** | |
// ************************************************************************************************************************************ | |
// | |
// ↓ Далее идут настройки, необходимые для правильной работы скрипта | |
function getTeplateSettings_() { | |
var sets = { | |
// ------------------------------ Н А С Т Р О Й К И ------------------------------------ | |
// ↓ Айди файла-шаблона. Можно заменить на айди вашего шаблона | |
id: '1aRfj-7Ytl9dTCN_nRK7WfxJNgbrLDCCr_enhtLAzQ2M', | |
// | |
// ↓ Айди папки, в которую планируете вставить отчёты | |
// ↓ Оставьте пустым чтобы создать отчёты в корне диска | |
folder: '', | |
managers: { | |
sheet: 'Менеджеры', // Лист где храниться информация о менеджерах | |
names: 'B7:B', // Диапазон где хранятся имена менеджеров | |
emails: 'C7:C' // Диапазон, где хранятся адреса электронных почт менеджеров | |
}, | |
out: { | |
sheet: 'Отчёт', // Лист на котором скрипт меняет имя менеджера | |
range: 'B1' // Адрес ячейки, в которую надо записать имя менеджера | |
} | |
// ------------------------------------------------------------------------------------- | |
}; | |
return sets; | |
} | |
// | |
// ↓ Основная функция, которая в цикле запускает создание отчётов менеджеров | |
function createReportsByTemplate() { | |
var sets = getTeplateSettings_(); // получить настройки | |
var set = {}; // переменная, в которой мы будем хранить настройки для создания одного шаблона менеджеру | |
var template = SpreadsheetApp.openById(sets.id); // файл шаблона | |
var managersSheet = template.getSheetByName(sets.managers.sheet); // лист, на котором хранится информация о менеджерах | |
var managerNamesData = managersSheet.getRange(sets.managers.names).getValues(); // имена менеджеров в виде двумерного массива данных | |
var managerMailsData = managersSheet.getRange(sets.managers.emails).getValues(); // почты менеджеров в виде двумерного массива данных | |
// | |
// [ 1 ]. Определить папку, куда копируем файлы | |
var folder; // пустое хранилище для папки | |
if (sets.folder === '') { folder = DriveApp.getRootFolder(); } // корневая папка | |
else { folder = DriveApp.getFolderById(sets.folder); } // папка по заданному айди | |
// | |
// [ 2 ]. ЦИКЛ. Пройдёмся по перечню менеджеров, получим настройки, и запустим скрипт на создание шаблона | |
var result = []; | |
for (var i = 0; i < managerNamesData.length; i++) { | |
// ============================= Настройка для одного запуска функции, создающей отчёт по шаблону | |
set = { | |
name: managerNamesData[i][0], // имя менеджера | |
email: managerMailsData[i][0], // электронная почта менеджера | |
folder: folder, // папка, куда складываем копии | |
id: sets.id, // айди файла-шаблона, чтобы создать копию | |
out: sets.out // информация о том, на какаом листе менять ключ отчёта -- имя менеджера | |
// ============================= | |
} | |
if (set.name !== '') { // если имя менеджера не пустое | |
result.push(createReportByTemplate_(set)); // запуск функции, которая сделает отчёт по шаблону | |
} | |
} | |
Logger.log(result); | |
} | |
// | |
// ↓ Функция, которая создаст один отчёт по настройкам | |
// Она запускается в цикле несколько раз | |
// | |
// set: | |
// { | |
// name: 'Иванов Иван', | |
// email: 'email@email.com', | |
// template: {Файл-шаблон}, | |
// out: { | |
// sheet: 'Отчёт', // Лист на котором скрипт меняет имя менеджера | |
// range: 'B1' // Адрес ячейки, в которую надо записать имя менеджера | |
// } | |
// } | |
function createReportByTemplate_(set) { | |
// [ 0 ]. Проверки | |
if (!set) { return -1; } // завершить скрипт, если нет настроек | |
if (!set.id) { return -2; } // нет айди файла | |
if (!set.name) { return -3; } // нет имени менеджера | |
if (set.name === '') { return -4; } // не указано имя менеджера | |
// | |
// [ 1 ]. Создать копию шаблона | |
var copy = DriveApp.getFileById(set.id).makeCopy(set.name, set.folder); // файл-копия | |
// ^^^ Называем файл так же как менеджера | |
// | |
// Примечание: Файл copy является объектом сервися диска Google: DriveApp. | |
// Этот объект можно копировать, менять его имя, и прочее. | |
// Чтобы получить доступ к copy как к таблице, мы должны | |
// получить новый объект -- таблицу sheet | |
var sheet = SpreadsheetApp.openById(copy.getId()); // это объект: таблица, которую мы создали | |
// | |
// [ 2 ]. Изменить ключ -- имя менеджера | |
sheet.getSheetByName(set.out.sheet).getRange(set.out.range).setValue(set.name); | |
// | |
// Последние действия -- только если указана почта менеджера | |
if (set.email) { | |
// [ 3 ]. Дать доступ на редактирование | |
copy.addEditor(set.email); // тут опять удобно опять использовать объект диска | |
// | |
// [ 4 ]. Отправить на почту уведомление | |
GmailApp.sendEmail(set.email, "Новый отчёт для вас", "Вы получили новый отчёт " + sheet.getUrl()); | |
} | |
return 0; // вернуть 0 -- успех | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment