我为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"
)。
我们在几个小工具中使用它,因此想知道:
setQuery
错误?提前谢谢。
此致
的Riccardo
答案 0 :(得分:2)
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。
希望有所帮助。