В сегодняшнем посте я разберу как создавать документы на основе шаблона, используя данные из Гугл Таблицы, где это можно использовать. Поделюсь примерами со скринами и кодом скрипта для Гугл таблицы.
Мне на практике попадалась задача такого плана — есть некий шаблон документа. Необходимо, используя данные из гугл таблицы, сформировать готовые документы и поместить их в определенную папку.
К примеру, у вас есть список клиентов. Необходимо для каждого клиента сформировать платежную квитанцию по заданному шаблону и поместить в специальную папку в виде отдельного файла.
Давайте вместе с вами, используя гугл скрипты, решим данную задачу.
По итогам статьи у нас будет модель решения, которую можно будет использовать для реализации реальных задач.
И так, поехали.
В начале составим общий алгоритм.
Имеем исходные данные, например список клиентов, где есть ФИО клиента и еще какие-то данные, которые мы будем использовать при формировании квитанций. Здесь имеется ввиду сформированный каким-либо способом набор исходных данных, который мы будем использовать далее.
У нас есть файл-шаблон, на основании которого мы будем формировать документы. В шаблоне есть общее для всех клиентов содержание, например логотип компании, общий текст и прочее.
Также в сформированном файле должна присутствовать и уникальная для каждого клиента информация, к примеру ФИО клиента, персональная скидка или что-либо другое, в зависимости от поставленной задачи.
Наш скрипт будет обрабатывать исходные данные и формировать по каждому клиенту документ, используя заранее созданный шаблон.
При этом общие для всех клиентов данные будут просто копироваться в новый файл, а уникальные — браться из данных клиента (набор данных) и вставляться в нужное место шаблона.
Это можно сделать с помощью заранее закодированных слов и оператора замены. Например, в шаблоне в нужном месте есть строка «{userName}». Скрипт вместо строки «{userName}» вставит ФИО клиента, данные по которому обрабатываются. И так далее по всем местам в шаблоне, куда необходимо вставить уникальные данные.
Иными словами, мы вначале копируем в нужную папку файл-шаблон, переименовываем его и делаем необходимые замены с помощью оператора замены:
resultFile.replaceText('{userName}', clientName);
В данной строке кода мы вместо ‘{userName}’ в новый файл вставляем ФИО нашего клиента, которое ранее было сохранено в переменную clientName. И, как можно понять, в переменной resultFile — наш созданный из шаблона файл.
Теперь давайте, упрощая некоторые моменты, решим задачу, которую поставили в начале статьи.
function createInvoice() { // создаем квитанции по шаблону согласно списку клиентов let folderID = '1ufVe1iKvmpQWERTYWmOtFzXY2-sTdvD'; //идентификатор папки с платежками let templateID = '1gNEEJMN7dP_5qo6NmtSrkfeQWERTYobSDspj1nLu-1g'; //идентификатор шаблона let folder = DriveApp.getFolderById(folderID); //получаем конечную папку по ее идентификатору let sheetSource = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("clientDB"); //получаем лист с исходными данными let dataSource = sheetSource.getRange(2,1,sheetSource.getLastRow()-1,sheetSource.getLastColumn()).getValues(); //получаем массив значений let today = new Date().toLocaleDateString("ru-RU"); //получаем текущую дату в местном формате // обрабатываем каждую запись поочередно и формируем конечный файл-квитанцию for (let i = 0; i < dataSource.length; i++) { let copy = DriveApp.getFileById(templateID).makeCopy(folder); //копируем шаблон в нашу папку let copyID = copy.getId(); //получаем идентификатор файла let resultFile = DocumentApp.openById(copyID); //получаем созданный файл по его идентификатору (чтобы работать с ним) resultFile.setName(dataSource[i][0]); //называем файл по ФИО клиента // производим в файле необходимые замены resultFile.replaceText('{today}', today); //текущая дата resultFile.replaceText('{clientName}', dataSource[i][0]); //ФИО клиента resultFile.replaceText('{tovarName}', dataSource[i][3]); //название товара resultFile.replaceText('{orderDate}', dataSource[i][2].toLocaleDateString("ru-RU")); //дата заказа (в местном формате) resultFile.replaceText('{personal}', dataSource[i][1]); //персональная скидка resultFile.saveAndClose(); //сохраняем изменения и закрываем файл } }
Надеюсь, комментарии дают понимание, как работает скрипт.
Единственно, замечу что для возможности дальнейшей обработки нового файла приходится получать его (открывать) с помощью идентификатора.
Теперь, для полноты картинки, приведу скриншоты исходных данных, шаблона и полученных результатов.
Исходные данные:
Наш шаблон:
Папка с сформированными файлами:
И наконец один из полученных в результате обработки файлов:
Понятно, что приведенная задача сильно упрощенная.
Как вариант, можно с помощью гугл-форм вносить в таблицу данные о кандидатах на определенные вакансии и затем скриптом формировать по каждому новому кандидату анкету с достаточно сложной структурой, которую можно распечатать и работать с ней дальше.
Данная статья — лишь пример использования скриптов для автоматизации подобных задач.
Рекомендую к прочтению общую статью по скриптам и примерами реализации. Свои вопросы и пожелания задавайте в комментариях.
P.S. Если вдруг вам нужно получить итоговые файлы в pdf-формате, нужно в наш код добавить несколько строчек:
resultFile.saveAndClose(); //сохраняем изменения и закрываем файл let pdf = resultFile.getAs('application/pdf'); //получаем наш файл в pdf формате folder.createFile(pdf); //создаем в нашей папке копию файла в формате pdf //исходный файл перемещаем в корзину let resultFileID = resultFile.getId(); //получаем идентификатор файла let tmpFile = DriveApp.getFileById(resultFileID); //получаем сам файл по его идентификатору tmpFile.setTrashed(true); //помещаем файл в корзину
Захватил последнюю строчку предыдущего кода, чтобы было понятно, куда вставлять новые строки.
Если интересует более подробная информация, как создавать pdf-файлы, используя данные из гугл таблиц — прошу СЮДА.
Рекомендую почитать:
- «Готовые шаблоны CRM на базе Google таблиц»
- «10 бирж фриланса и удаленной работы для новичков и профи: список и рекомендации по заработку»
- «Список полезных сервисов для создания контента и продвижения в соцсетях»