我发现很难得到这个答案。我正在考虑为我的客户创建一个谷歌图表仪表板并有一个年、月、日过滤器,但是,他们 1 年的记录超过 4000 行,我想在文件中添加更多工作表并将每年的数据放入一张单独的纸。
我将如何在脚本中创建一个视图,该视图从所有工作表中获取所有信息并将它们放在一个视图中,以便我可以将其用作我的 Google Chart Dashboard 的数据源。
我尝试在一张表中添加 20,000 行,它会返回服务器错误。
任何帮助将不胜感激!
我发现很难得到这个答案。我正在考虑为我的客户创建一个谷歌图表仪表板并有一个年、月、日过滤器,但是,他们 1 年的记录超过 4000 行,我想在文件中添加更多工作表并将每年的数据放入一张单独的纸。
我将如何在脚本中创建一个视图,该视图从所有工作表中获取所有信息并将它们放在一个视图中,以便我可以将其用作我的 Google Chart Dashboard 的数据源。
我尝试在一张表中添加 20,000 行,它会返回服务器错误。
任何帮助将不胜感激!
Query API 一次只能从一张表中选择数据,因此您必须进行多个查询,然后在查询返回时将所有数据连接到一个 DataTable 中:
function drawChart () {
// use "gid" parameter to select the sheet number
// or the "sheet" parameter to select the sheet by name
var query1 = new google.visualization.Query(spreadsheetUrl + '&gid=0'); // sheet 1
var query2 = new google.visualization.Query(spreadsheetUrl + '&gid=1'); // sheet 2
var query3 = new google.visualization.Query(spreadsheetUrl + '&gid=2'); // sheet 3
// etc...
// set up each query
// eg: query1.setQuery('select a, b');
var queriesReady = [false, false, false]; // array should have a number of elements equal to the number of queries
var dataTables = [];
// readyCheck function takes the response returned by the query and the index in the "queriesReady" array to set to true
// each query should use a unique index
function readyCheck (response, index) {
if (response.isError()) {
alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
return;
}
data[index] = response.getDataTable();
queriesReady[index] = true;
var allDone = true;
for (var i = 0; i < queriesReady.length; i++) {
allDone = allDone & queriesReady[i];
}
if (allDone) {
// merge DataTables and draw chart
}
}
query1.send(function (response) {
readyCheck(response, 0);
});
query2.send(function (response) {
readyCheck(response, 1);
});
query3.send(function (response) {
readyCheck(response, 2);
});
}
这是一个很好的解决方案,但还有另一个错字:
data[index] = response.getDataTable();
应该:
dataTables[index] = response.getDataTable();