четверг, 14 мая 2020 г.

Google sheet (гугл таблицы). Вывод данных в формате JSON с помощью App Script.

Создадим исходные данные. Создадим новую гугл таблицу и введем данные в два столбца:



Откроем редактор скриптов и введем текст функции  doGet ()


//--------------------
//--- function doGet  -  когда пользователь посещает приложение или программа отправляет ему GETз
//--- Справка - https://developers.google.com/apps-script/guides/web?hl=ru
//--- Автор: Andrey Sipelawes
//--- Дата создания: 2020-05-15
//--------------------
function doGet(e){

 // Заменить на URL Вашей таблицы
 var ss = SpreadsheetApp.openByUrl("URL Вашей таблицы");

// sheet - имя листа в таблице, заменить на имя Вашего листа в таблице
 var sheet = ss.getSheetByName("sheet - имя Вашего листа в таблице");
  
 return getUsers(sheet); 
  
}

В моем случае будет:

function doGet(e){

 // Заменить на URL Вашей таблицы
 var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1TO4mbdjVi36wrm7GccEvTn7rqfgwnIZD35i5PQJxWGs/edit?usp=sharing");

// sheet - имя листа в таблице, заменить на имя Вашего листа в таблице
 var sheet = ss.getSheetByName("test");
  
// вызываем нашу функцию по созданию JSON
 return getTest(sheet); 
  
}

Далее создадим функцию по обработке полученных данных и вывод их в формате JSON.


/--------------------
//--- function getTest  -  вывод данных с листа гугл таблицы в формате JSON
//--- Автор: Andrey Sipelawes
//--- Дата создания: 2020-05-15
//--------------------
function getTest(sheet){
  var jo = {};
  var dataArray = [];

// заносим данные с листа test  в массив rows
  var rows = sheet.getRange(2,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
  
  for(var i = 0, l= rows.length; i<l ; i++){
    var dataRow = rows[i];
    var record = {};
    record['id'] = dataRow[0];
    record['name'] = dataRow[1];
    
    dataArray.push(record);
    
  }  
  
  jo.user = dataArray;
  
  var result = JSON.stringify(jo);
  
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
  
}  

Опубликуем наше веб приложение 



Проверим







среда, 13 мая 2020 г.

Google sheet (гугл таблицы). Выбор данных из выпадающего списка на отдельном листе.


Есть таблица с данными


Из исходной таблицы будем формировать список товаров, по наименованию, которое будет введено в ячейку A1 Лист4. Для этого в ячейку B2 введем формулу

=QUERY('Лист3'!A:E;"select A,B,C WHERE B = '"&A1&"' ";1)


Google таблицы. Функция QUERY

QUERY

Синтаксис

QUERY(данные; запрос; [заголовки])
  • данные – диапазон ячеек, для которого нужно выполнить запрос.
    • Каждый столбец данных может содержать только логические, числовые (включая типы дата/время) или строковые значения.
    • Если в столбце содержатся данные разных типов, преобладающий тип данных определяет тип всего столбца для целей запросов. Остальные типы данных считаются нулевыми.
  • запрос – запрос на выполнение, записанный на языке запросов API визуализации Google.
    • Значение параметра запрос должно быть заключено в кавычки или представлять собой ссылку на ячейку, содержащую соответствующий текст.
    • На странице https://developers.google.com/chart/interactive/docs/querylanguage можно получить более подробную информацию о языке запросов.
  • заголовки – [ НЕОБЯЗАТЕЛЬНО ] – количество заголовочных строк в верхней части раздела данных. В случае, если параметр опущен или равен -1, его значение вычисляется автоматически в зависимости от содержимого данных.
справка по функции (https://support.google.com/docs/answer/3093343?hl=ru)

С диапазоном ячеек все понятно. Перейдем к запросу.

Синтаксис языка запросов состоит из следующих пунктов. Каждое предложение начинается с одного или двух ключевых слов. Все пункты не являются обязательными. Пункты разделены пробелами. Порядок пунктов должен быть следующим:
пункт
Применение
Выбирает, какие столбцы возвращать и в каком порядке. Если опущено, возвращаются все столбцы таблицы в порядке по умолчанию.
Возвращает только те строки, которые соответствуют условию. Если опущено, возвращаются все строки.
Агрегирует значения по строкам.
Преобразует отдельные значения в столбцах в новые столбцы.
Сортирует строки по значениям в столбцах.
Ограничивает количество возвращаемых строк.
Пропускает указанное количество первых строк.
Устанавливает метки столбцов.
Форматирует значения в определенных столбцах, используя заданные шаблоны форматирования.
Устанавливает дополнительные параметры.
from
from Пункт был исключен из языка.

Справка от Google по языку запросов API находится по ссылке: https://developers.google.com/chart/interactive/docs/querylanguage


Начнем с SELECT, введем в ячейку G2 Лист 1 формулу

=QUERY($A$1:$E$49;"select A";1)


мы вывели данные из диапазона $A$1:$E$49 первый столбец - А

Можно вывести все столбцы 

=QUERY($A$1:$E$49;"select *";1)


Можно ограничить количество строк

=QUERY($A$1:$E$49;"select * limit 5";1)




Google таблицы. Объединение нескольких листов Google (рабочих книг) в файл основных данных

Google таблицы. Объединение нескольких листов Google (рабочих книг) в файл основных данных


Исходные данные:

Есть два файла Google таблиц (Точка 1, Точка 2). Структура данных в таблицах одинаковая, разные значения.

Таблица Точка 1

Таблица Точка 2

Для анализа сводных данных из таблиц (Точка 1, Точка 2), создадим новую Google таблицу и назовем ее итоговая таблица


 Сформируем сводные данные, для этого воспользуемся функцией 

IMPORTRANGE

Синтаксис

IMPORTRANGE(ключ_таблицы; диапазон)
  • ключ_таблицы – URL таблицы, из которой импортируются данные.
    • Значение параметра ключ_таблицы должно быть текстом, заключенным в кавычки, или ссылкой на ячейку, содержащую необходимую информацию.
  • диапазон – строка в формате "[название_листа!]диапазон" (например, "Лист1!A2:B6" или "A2:B6"). Параметр определяет диапазон, который нужно импортировать.
    • Компонент название_листа в параметре диапазон не является обязательным. По умолчанию IMPORTRANGE импортирует данные из заданного диапазона первого листа.
    • Значение параметра диапазон должно быть текстом, заключенным в кавычки, или ссылкой на ячейку, содержащую необходимую информацию.


справка по функции (https://support.google.com/docs/answer/3093340?hl=ru)

Импортируем заголовок из таблицы Точка 1, в ячейку A1 Листа 1 введем формулу

=IMPORTRANGE("1MoMimtMoxhSE3OXn4LzA6BpVIb_WiznOldsFvvraZkQ";"Лист1!a1:e1")


Как мы видим, чтобы получить ключ_таблицы, переходим в строку с адресом нашей страницы 


Ключ находится между слешем (/) после имени раздела документа (d) и следующем слешем (/). Выделяем и копируем в нашу функцию.

=IMPORTRANGE("1MoMimtMoxhSE3OXn4LzA6BpVIb_WiznOldsFvvraZkQ";

Далее(следующий параметр функции) указываем имя листа и диапазон для импорта

"Лист1!a1:e1")

Все вместе

=IMPORTRANGE("1MoMimtMoxhSE3OXn4LzA6BpVIb_WiznOldsFvvraZkQ";"Лист1!a1:e1")

При первом импорте возможно будет запрос на доступ к таблице Точка 1.

Для импорта из нескольких google таблиц воспользуемся пользовательсим массивом. 
Как работать с массивами в Google Таблицах (справка)

Введем в ячейку A2 Лист 1 формулу:

={IMPORTRANGE("1qaIDBtTZ9Jhavv84BTeKT5pfbW0Rl6L_7Zcuhxzhsyw";"Лист1!a2:e25"); IMPORTRANGE("1MoMimtMoxhSE3OXn4LzA6BpVIb_WiznOldsFvvraZkQ";"Лист1!a2:e25")}


Для анализа данных можно воспользоваться функцией

QUERY

Синтаксис

QUERY(данные; запрос; [заголовки])
  • данные – диапазон ячеек, для которого нужно выполнить запрос.
    • Каждый столбец данных может содержать только логические, числовые (включая типы дата/время) или строковые значения.
    • Если в столбце содержатся данные разных типов, преобладающий тип данных определяет тип всего столбца для целей запросов. Остальные типы данных считаются нулевыми.
  • запрос – запрос на выполнение, записанный на языке запросов API визуализации Google.
    • Значение параметра запрос должно быть заключено в кавычки или представлять собой ссылку на ячейку, содержащую соответствующий текст.
    • На странице https://developers.google.com/chart/interactive/docs/querylanguage можно получить более подробную информацию о языке запросов.
  • заголовки – [ НЕОБЯЗАТЕЛЬНО ] – количество заголовочных строк в верхней части раздела данных. В случае, если параметр опущен или равен -1, его значение вычисляется автоматически в зависимости от содержимого данных.
справка по функции (https://support.google.com/docs/answer/3093343?hl=ru)


Введем в ячейку A2 Лист 1 формулу

=QUERY({IMPORTRANGE("1MoMimtMoxhSE3OXn4LzA6BpVIb_WiznOldsFvvraZkQ";"Лист1!a2:e25");IMPORTRANGE("1qaIDBtTZ9Jhavv84BTeKT5pfbW0Rl6L_7Zcuhxzhsyw";"Лист1!a2:e25")};"SELECT * ORDER BY Col2")


Второй параметр функции 

"SELECT * ORDER BY Col2"

Выводим все графы с сортировкой по 2 столбцу