使用Javascript中的Oauth授权将Google表格API v3迁移到v4之后如何实现makeApiCall()方法

问题描述 投票:1回答:2

Google已经构建了Google表格API的第4版,但其文档仍然是v3。没有关于如何使用Google表格API v4实施简单OAuth身份验证的完整示例。

我看到一个迁移指南here,我也看到了一个部分示例here但是一个完整的例子无处可寻。 “当前”版本是here,它最后更新于2018年10月,没有提供v4示例。

让我们说在我授权用户之后,我正在尝试阅读workbook2中的特定电子表格,并且我明确指出了我需要的列。然后我使用Google Visualization API呈现该信息。

所以,这就是我在Google表格v3遗产中的表现。

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,如果我按照这个部分示例here,如何将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);
  });
}
javascript google-apps-script google-sheets google-visualization google-sheets-api
2个回答
1
投票
  • 您已经能够使用Sheets API。 在API控制台上启用了Sheets API。 访问令牌可用于从电子表格中检索值。
  • 您想从工作表中检索A:A,B:B,C:C,E:E,H:H的值。
  • 您想要从Sheets API检索的值中使用getDataTable()检索dataTable。

如果我的理解是正确的,那么这个修改怎么样?在此修改中,我在您的问题中修改了您的脚本。请将此视为几个答案中的一个。

Modification points:

  • 要从A:A,B:B,C:C,E:E,H:H检索值,请使用Sheets API中的values.get方法。 在这种情况下,首先,检索A:H的值,并检索列A,B,C,E和H的值。
  • 要使用getDataTable()检索dataTable,请使用ChartWrapper类。

Modified script:

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);
  });
}

Note:

  • 当使用Sheets API中的values.get方法时,请使用a1Notation作为范围。所以在这种情况下,范围变成Sheet1!A:H。这意味着“Sheet1”的“A:H”。

References:

如果我误解了你的问题并且结果不是你想要的,我道歉。


2
投票

我不相信Sheets API(V4)中有Visualization API的模拟。从技术上讲,可视化API实际上不是传统Sheets API(V3)的一部分。如果它是Charts API的一部分。所以你应该能够继续使用它。

您甚至可以直接在GAS中使用服务器端(请参阅Using Bound Google Scripts to Generate a Query Object)。

热门问题
推荐问题
最新问题