1

我发现很难得到这个答案。我正在考虑为我的客户创建一个谷歌图表仪表板并有一个年、月、日过滤器,但是,他们 1 年的记录超过 4000 行,我想在文件中添加更多工作表并将每年的数据放入一张单独的纸。

我将如何在脚本中创建一个视图,该视图从所有工作表中获取所有信息并将它们放在一个视图中,以便我可以将其用作我的 Google Chart Dashboard 的数据源。

我尝试在一张表中添加 20,000 行,它会返回服务器错误。

任何帮助将不胜感激!

4

2 回答 2

2

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);
    });
}
于 2013-07-23T19:00:46.913 回答
0

这是一个很好的解决方案,但还有另一个错字:

data[index] = response.getDataTable();

应该:

dataTables[index] = response.getDataTable();
于 2020-05-03T00:36:46.713 回答