我为 Google Apps 转销商工作,我为我们的客户实现小工具。

我们有几个小工具使用 Google Visualization API 来查询电子表格(具有动态 ID)并将结果显示在表格中。

我们正在使用这段代码:

function drawVisualization() {
  var oldSpreadsheetUrl = "https://docs.google.com/spreadsheet/tq?key=<ss_id>";
  var newSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/<ss_id>/gviz/tq";
  var query = new google.visualization.Query(oldSpreadsheetUrl);
  query.setQuery("SELECT A,B");
  query.send(handleQueryResponse);
}

function handleQueryResponse(response) {
  if(response.isError()) {
    console.log(response.getMessage());
  } else {
    console.log("NUMBER OF COLUMNS: " + response.getDataTable().getNumberOfColumns());
  }
}

并使用此示例电子表格进行测试(新的 Google 电子表格)

电子表格 ID : 1qMvY3y4MkwoK1UvCA9A8dW4BbmhH1iMwWqGLEM5vjJk

只要我们查询旧电子表格,一切正常,但是如果我们查询新电子表格(使用标准 url - oldSpreadsheetUrl ),请求会因超时异常而失败,我们会收到 404 异常。
这是我们在浏览器控制台中得到的消息:
http://i.imgur.com/h4DjyQ6.png

通过在数据源中使用这个新 url,我们无论如何都能使查询工作:
"https://docs.google.com/spreadsheets/d/<spreadsheet_id>/gviz/tq"

但是使用这种表示法, setQuery 指令被忽略,并且返回所有三列而不是前两列( "SELECT A,B" )。

我们在几个小工具中使用它,因此想知道:
  • 我们如何克服 setQuery 错误?
  • 是否有一种编程方式可以知道电子表格是新版本还是旧版本?

  • 先感谢您。

    问候,

    里卡尔多

    最佳答案

    几周前,当我们使用新的 Google 表格进行一些测试时,我遇到了同样的问题。基本上,旧的 Google 表格需要具有以下格式的 URL:

    https://spreadsheets.google.com/tq?key={key}
    

    虽然新的 Google 表格需要具有以下格式的 URL:
    https://docs.google.com/spreadsheets/d/{key}/gviz/tq
    

    您应该能够使用域来区分新旧 Google 表格。否则,您可以随时查找 /gviz/ 来判断是否正在使用新的 Google 表格。您可以在 this bug report 中找到更多信息。

    关于您关于 setQuery 的另一点,我今天早上在调试我自己的问题时注意到,可视化 API 将列 ID 返回为“Col 0”、“Col 1”等,而不是“A”、“B"等。所以这可能是您的 ("SELECT A,B") 查询不起作用的原因。我也刚刚为这个问题记录了 a bug

    希望有帮助。

    关于api - 使用新的 Google 电子表格时,Google Visualization API 查询失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23084176/

    10-11 22:04
    查看更多