Как передать строку запроса в Google Sheets API v4 в Javascript - PullRequest
1 голос
/ 22 апреля 2019

В предыдущей версии я делал (упрощенно):

 var queryString = encodeURIComponent('SELECT A,B,D,C WHERE D=1');
 var query = new google.visualization.Query(
          'https://docs.google.com/spreadsheets/d/1*SPREADSHEETID*/gviz/tq?gid=1013479342&headers=1&tqx=responseHandler:handleQueryResponse' + '&access_token=' + encodeURIComponent(gapi.auth.getToken().access_token));
 query.send(handleQueryResponse);

 function handleQueryResponse(response) {
 var dataTable = response.getDataTable();
 }

Теперь, чтобы воспользоваться преимуществами API Google Sheets v4 (gapi.client.sheets.spreadsheets.values.get), которое не работает в v3. Я делаю:

      var params = {
    valueRenderOption: "UNFORMATTED_VALUE",
    spreadsheetId: '*YOURSPREADSHEETID',
    range: 'Sheet1!A:D', 
      var request = gapi.client.sheets.spreadsheets.values.get(params); 
  request.then(function(response) {
         var values = response.result.values.map(function(e) {return [e[0], e[1], e[3], e[2]]});
    var w = new google.visualization.ChartWrapper({dataTable: values, 
    query: "select * where D = 1"}); // THIS DOESN'T WORK
   var dataTable = w.getDataTable();

Я подумал, что могу просто добавить "query:" select *, где D = 1 "" в свойствах chartwrapper, чтобы избежать сортировки и просмотра каждого элемента в массиве или использовать дополнительный controlwrapper.

1 Ответ

1 голос
/ 22 апреля 2019

Я оставлю это здесь.После дальнейших исследований API Google Sheets v4 по-прежнему не поддерживает простую фильтрацию.

Один из разработчиков Google считает, что фильтрация должна быть эксклюзивной функцией для полноценной базы данных, а листы Google - не так, поэтому ясомневаюсь, что они когда-нибудь вернут функцию из v3.

Если вам нужна фильтрация, у вас есть 3 варианта:

  • Сначала отфильтруйте электронную таблицу (создайте несколько рабочих листов с отфильтрованными данными, а затем вызовите диапазон, к которому уже применен фильтр).
  • вернитесь к использованию Google Sheets v3, который поддерживает фильтрацию (см. Выше).
  • фильтрует данные после их получения на уровне клиента (да, я знаю, что это хуже для производительности).

Я выбрал третий способ.Поскольку я работаю с API визуализации Google, все, что мне нужно было сделать, это применить фильтр к представлению данных, прежде чем я его нарисовал.

var view = new google.visualization.DataView(dataTable);
view.setRows(dataTable.getFilteredRows([{column: 4, value: 1}]));
...