从同一Google Spreadsheet文件中的两个工作表为Google Charts DataSource配置DataView

问题描述 投票:1回答:2

我发现很难得到这个答案。我正在寻找为我的客户创建Google Chart Dashboard的工具,并且具有Year,Month,Day过滤器,但是他们一年的记录超过4000行,我想在文件中添加更多工作表并将每年的数据值放入另一张纸。

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

我尝试在一张纸中添加20,000行,这将返回服务器错误。

任何帮助将不胜感激!

google-apps-script google-visualization google-sheets google-spreadsheet-api
2个回答
2
投票

查询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);
    });
}

0
投票

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

data[index] = response.getDataTable();

应该是:

dataTables[index] = response.getDataTable();
© www.soinside.com 2019 - 2024. All rights reserved.