it-swarm.com.ru

Можно ли использовать функцию «запрос» в электронной таблице Google в скрипте приложений Google?

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

Я могу сделать это с помощью функции запроса внутри электронной таблицы. НО, не можете найти способ вызвать функцию запроса из скрипта приложения?

Можно ли это сделать? Был бы признателен за образец кода. Благодарю.

11
awsamar

Нет, API для функции Query не позволяет вызывать ее из скрипта Google Apps. (На самом деле нет способа вызвать ЛЮБУЮ функцию электронной таблицы таким образом.)

Вы можете получить некоторые аналогичные функции, не написав все это самостоятельно. 2D Arrays Library включает в себя множество функций "фильтра", которые позволяют вам получать совпадающие строки.

8
Mogsdad

Я не знаю, есть ли ограничение на это ...

function test () {
  var req = query("=QUERY(shopT!B2:E; \"select min(E) where (B=3 or B=4 and D=2) group by C, D\")");

  Logger.log(req);
}

function query(request) { 
  var sheet = sp.insertSheet();
  var r = sheet.getRange(1, 1).setFormula(request);

  var reply = sheet.getDataRange().getValues();
  sp.deleteSheet(sheet);

  return reply;
}
14
zizix

Возможно, с помощью формулы вы можете сделать что-то, что вам нужно.

function testFormula() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[1];
  var cell = sheet.getRange("A1");
  cell.setFormula("=QUERY('Sheet0'!A1:B5;\"SELECT A, B\"; 0)");
}
5
wchiquito

Если у вас уже есть информация о пользователе, которую вы хотите использовать в ячейке на листе с именем "фильтр"

Вы можете поместить эту формулу в лист с именем: "шаблон"

в B1 эта формула: = запрос (DataToFilter! A1: E, "выберите A, B, C, D, где D содержит" & A1 & "'", - 1)

затем с этим кодом вы получите лист с именем: "newFilter", который будет получать ваши отфильтрованные данные.

var templateToCopy = ss.getSheetByName('template');
template.copyTo(ss).setName('newFilter');
var editFilter = ss.getSheetByName('newFilter');
//assuming the user information needed is in A5
editFilter.getRange('A1').setValue('=filter!A5');
0
Antoine Lochet