我正在尝试使用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');
});
答案 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中的新功能。但这没有任何改变。希望它有所帮助!