Google Visualization API查询因新的Google电子表格而失败

时间:2014-04-15 12:46:54

标签: api google-sheets visualization google-spreadsheet-api

我为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电子表格)进行测试

SPREADSHEET ID :1qMvY3y4MkwoK1UvCA9A8dW4BbmhH1iMwWqGLEM5vjJk


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

我们能够通过在数据源中使用这个新url来使查询工作:

"https://docs.google.com/spreadsheets/d/<spreadsheet_id>/gviz/tq"

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

我们在几个小工具中使用它,因此想知道:

  1. 我们如何克服setQuery错误?
  2. 是否有编程方式来了解电子表格是新版本还是旧版本?
  3. 提前谢谢。

    此致

    的Riccardo

1 个答案:

答案 0 :(得分:2)

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

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

虽然新的Google表格预计会使用以下格式的网址:

https://docs.google.com/spreadsheets/d/{key}/gviz/tq

您应该可以使用该域来区分旧版和新版Google表格。如果做不到这一点,您可以随时查找/gviz/来判断是否正在使用新的Google表格。您可以在this bug report中找到更多信息。

关于你关于setQuery的另一点,我今天早上在调试我自己的问题时注意到,Visualization API正在返回列ID为&#34; Col 0&#34; ,&#34; Col 1&#34;而不是&#34; A&#34;,&#34; B&#34;等等,这可能是您的("SELECT A,B")查询无效的原因。我也刚刚针对此问题记录了a bug

希望有所帮助。