dc.js使用filesaver.js过滤表导出

时间:2016-07-19 09:33:51

标签: dc.js filesaver.js

我正在尝试使用FileSaver.js导出dc.js过滤的表格数据。

我使用基于this的下面的代码,除了导出所有字段(但过滤好了)之外没问题,而我只需要特定于字段的字段,这些字段只有少数字段加上2个计算。< / p>

d3.select('#download')
    .on('click', function() {
        var blob = new Blob([d3.csv.format(dateDim.top(Infinity))], {type: "text/csv;charset=utf-8"});
        saveAs(blob, DateT + '.csv');
    });

我有没有办法指向桌子而不是那个维度?

感谢。

编辑:以下工作代码

d3.select('#download')
  .on('click', function() {
        var data = MYTABLEDIM.top(Infinity);
        {
            data = data.map(function(d) {
                var row = {};
                MYTABLENAME.columns().forEach(function(c) {
                    row[MYTABLENAME._doColumnHeaderFormat(c)] = MYTABLENAME._doColumnValueFormat(c, d);
                });
                return row;
            });
        }
        var blob = new Blob([d3.csv.format(data)], {type: "text/csv;charset=utf-8"});
        saveAs(blob, 'data.csv');
});

1 个答案:

答案 0 :(得分:1)

好问题。

实际上,通过使用数据表的一些未记录的方法,可以根据列定义格式化数据。

我已使用单选按钮更新了the example,以选择要下载的数据。

以下是在表中编码时转换和下载数据的代码:

d3.select('#download')
    .on('click', function() {
        var data = nameDim.top(Infinity);
        data = data.map(function(d) {
            var row = {};
            table.columns().forEach(function(c, i) {
                // if you're using the "original method" for specifying columns,
                // use i to index an array of names, instead of table._doColumnHeaderFormat(c)
                row[table._doColumnHeaderFormat(c)] = table._doColumnValueFormat(c, d);
            });
            return row;
        });
        var blob = new Blob([d3.csv.format(data)], {type: "text/csv;charset=utf-8"});
        saveAs(blob, 'data.csv');
    });

基本上,当选择table无线电时,我们将使用表格用于格式化数据的相同功能逐行转换数据。

行将按原始数据的顺序排列,而不是像表那样排序。 (严格来说,the columns may not be in the same order either)。这将是一项更大的努力,可能需要dc.js中的新功能。但这没有任何改变。希望它有所帮助!