Как реализовать метод makeApiCall () после переноса Google Sheets API v3 в v4 с помощью авторизации Oauth в Javascript - PullRequest
1 голос
/ 20 апреля 2019

У Google есть сборка v4 API Google Sheets, но документация по этому вопросу все еще на v3. Нет полных примеров того, как реализовать простую аутентификацию OAuth с помощью Google Sheets API v4.

Я вижу руководство по миграции здесь и частичный пример здесь Но полного примера нигде не найти. «Текущая» версия - здесь , и в последний раз она обновлялась в октябре 2018 года без примера v4.

Допустим, что после того, как я авторизовал пользователя, я пытаюсь прочитать конкретную электронную таблицу в workbook2 и явно указываю, какие столбцы мне нужны. Затем я представляю эту информацию с помощью API визуализации Google.

Итак, вот как я это делаю в Google Sheets v3 legacy.

function makeApiCall() {
var queryString = encodeURIComponent('SELECT A,B,C,E,H');
   var tqURL = new google.visualization.Query(
        'https://docs.google.com/spreadsheets/d/*yourspreadsheetid*/gviz/tq?gid=*yourworkbookid*&headers=1&tqx=responseHandler:handleTqResponse' + '&access_token=' + encodeURIComponent(gapi.auth.getToken().access_token));
      tqURL.send(handleTqResponse);
}

function handleTqResponse(resp) {
  var dataTable = resp.getDataTable();
}

Для v4, если я последую этому частичному примеру здесь , как мне преобразовать tqURL в метод GET? и как я могу получить ответ (rsp) в виде DataTable ()?

    function makeApiCall() {
  var params = {
    spreadsheetId: 'my-spreadsheet-id',  // all clear here
    //what about workbook gid?
    // The ranges to retrieve from the spreadsheet.
    ranges: [],  // [A:A,B:B,C:C,E:E,H:H) ????
    includeGridData: false,
   //no need to include the access_token here?
  };

  var request = gapi.client.sheets.spreadsheets.get(params);
  request.then(function(response) {
  console.log(response.result);
  //var dataTable = responce.getDataTable(); ?? 
  }, function(reason) {
    console.error('error: ' + reason.result.error.message);
  });
}

Ответы [ 2 ]

2 голосов
/ 20 апреля 2019

Я не верю, что есть аналог для API визуализации в Sheets API (V4).Технически API визуализации на самом деле не является частью устаревшего API Sheets (V3).Во всяком случае, это часть API Charts.Таким образом, вы сможете продолжить его использование.

Вы даже можете использовать его непосредственно на стороне сервера в GAS (см. Использование связанных скриптов Google для создания объекта запроса ).

1 голос
/ 20 апреля 2019
  • Вы уже можете использовать Sheets API.
    • Sheets API включен на консоли API.
    • Маркер доступа можно использовать для извлечения значений из электронной таблицы.
  • Вы хотите получить значения A:A,B:B,C:C,E:E,H:H из листа.
  • Вы хотите получить dataTable, используя getDataTable() из значений, полученных API Sheets.

Если мое понимание верно, как насчет этой модификации? В этой модификации я модифицировал ваш скрипт по вашему вопросу. Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Очки модификации:

  • Чтобы извлечь значения из A:A,B:B,C:C,E:E,H:H, используйте метод values.get в API Sheets.
    • В этом случае сначала извлекаются значения A:H и извлекаются значения столбцов A, B, C, E и H.
  • Чтобы извлечь dataTable, используя getDataTable(), используйте ChartWrapper Class.

Модифицированный скрипт:

function makeApiCall() {
  var params = { // Modified
    spreadsheetId: 'my-spreadsheet-id',
    range: 'Sheet1!A:H', // Retrieve the values of "A:H".
  };
  var request = gapi.client.sheets.spreadsheets.values.get(params); // Modified
  request.then(function(response) {
    var values = response.result.values.map((e) => [e[0], e[1], e[2], e[4], e[7]]); // Added
    var w = new google.visualization.ChartWrapper({dataTable: values}); // Added

    var dataTable = w.getDataTable();

  }, function(reason) {
    console.error('error: ' + reason.result.error.message);
  });
}

Примечание:

  • Когда используется метод values.get в API Sheets, используйте a1Notation для диапазона. Таким образом, в этом случае диапазон становится Sheet1!A:H. Это означает «A: H» для «Sheet1».

Ссылки:

Если я неправильно понял ваш вопрос и результат оказался не тем, что вы хотите, я прошу прощения.

...