среда, 31 августа 2016 г.
Google Drive. Отчет с данными из таблицы. Создание простенькой БД. Часть 1
Думаю все знают про Google Drive (Google Docs), и многие наверное знают про Google Apps Script, если кто не знает можете почитать, вкратце это API для документов Google. Представляю еще один способ как использовать Google Spreadsheet (Таблицы) и Google Doc (Документ), для формирования документов с данными из таблицы.
Для тех кто впервые узнал о GAS (Google Apps Script) советую почитать Getting Started with Google Apps Script
Задача: Автоматизировать процесс создания документов.
Решение:
1. Открыть базу, найти нужные данные;
2. Создать копию шаблона;
3. Заполнить скопированный шаблон;
Для хранения данных будем использовать Таблицы, для хранения шаблона будем использовать Документ.
Документ — содержит отформатированный текст документа для выдачи клиенту, в котором данные клиента хранятся в переменных (в моем случае использовались такие переменные: ).
В таблицах будем хранить сами данные в такой структуре:

Для примера шаблона возьмем текст:

Пара слов о ID, в Диске у каждого объекта свой ID и получить его можно взглянув на строку браузера при открытом объекте (Документе, Таблице, Папке):

Ниже код, думаю он достаточно комментирован, прошу простить за мойфранцузский английский. Входная точка скрипта doAction():
В финале получаем новый документ в папке с Актами

и заполненный данными с Таблицы

Таким образом можно автоматизировать простую выдачу счетов или актов в небольшой конторе, без установки прикладного софта.
Если будет интересно, могу продолжить в следующей статье о GUI.
Спасибо за внимание!
Для тех кто впервые узнал о GAS (Google Apps Script) советую почитать Getting Started with Google Apps Script
Задача: Автоматизировать процесс создания документов.
Решение:
1. Открыть базу, найти нужные данные;
2. Создать копию шаблона;
3. Заполнить скопированный шаблон;
Для хранения данных будем использовать Таблицы, для хранения шаблона будем использовать Документ.
Документ — содержит отформатированный текст документа для выдачи клиенту, в котором данные клиента хранятся в переменных (в моем случае использовались такие переменные: ).
В таблицах будем хранить сами данные в такой структуре:

Для примера шаблона возьмем текст:

Пара слов о ID, в Диске у каждого объекта свой ID и получить его можно взглянув на строку браузера при открытом объекте (Документе, Таблице, Папке):

Ниже код, думаю он достаточно комментирован, прошу простить за мой
function doAction() {
var result = ReadBaseData("31-05-2012");
//If found data for this date...
if (result != null ) {
var doc = CreateNewDoc("Act from " + result[0][0]);
FillTemplate(doc, result);
}
}
//inDoc - its a empty template, inData - data for filling template
function FillTemplate(inDoc, inData) {
//Getting count of files in folder
var NUM = DocsList.getFolderById(FOLDER_ID).getFiles().length;
//Replace masks (Don't work [NUM] or $NUM or something else)
inDoc.replaceText("<NUM>", NUM + 1);
inDoc.replaceText("<DATE>", Utilities.formatDate(inData[0][0], "GMT", "dd.MM.yyyy"));
//get first table in document
var table = curDoc.getTables()[0];
for (i=0; i< inData.length; i++) {
var row = table.appendTableRow();
row.appendTableCell(inData[i][1]);
row.appendTableCell(inData[i][2]);
}
curDoc.saveAndClose();
}
function CreateNewDoc(docName) {
//Making copy of blank file
var blankDoc = DocsList.getFileById(BLANK_DOC_ID).makeCopy(docName);
blankDoc.addToFolder(DocsList.getFolderById(FOLDER_ID));
//return working doc and table base
return curDoc = DocumentApp.openById(blankDoc.getId());
}
//get range and sort only for day from parameter
function ReadBaseData(inDate) {
var ssDoc = SpreadsheetApp.openById(BASE_TABLE_ID).getActiveSheet();
//get filled range
var data = ssDoc.getDataRange().getValues();
//create new array with data to inDate,
//for start from 1 because first row is text column headers
var filteredData = new Array( new Array() );
for (i=1; i< data.length; i++) {
data[i][0] = convertDate(data[i][0]);
if (data[i][0] == inDate && data[i][3] == 1) {
filteredData[i-1] = data[i];
}
}
return filteredData;
}
* This source code was highlighted with Source Code Highlighter.
В финале получаем новый документ в папке с Актами

и заполненный данными с Таблицы

Таким образом можно автоматизировать простую выдачу счетов или актов в небольшой конторе, без установки прикладного софта.
Если будет интересно, могу продолжить в следующей статье о GUI.
Спасибо за внимание!
0 коммент.:
Отправить комментарий