我为 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/