highcharts csv export plugin

时间:2013-05-24 17:01:22

标签: javascript csv highcharts

Highcharts提供了将图表系列数据导出到csv的示例。 (http://highcharts.uservoice.com/forums/55896-general/suggestions/2495153-export-chart-data-to-csv-excel-and-more-via-dat

多次点击“警报CSV”按钮,您将开始看到每次点击都会复制系列名称,从而导致结构严重的csv输出。

我尝试使用unshift直接将系列名称添加到series.yData数组而不是列数组,但我收到相同的输出。

我也尝试添加series.name,只要它不是列数组的一部分,但也不起作用。 Unshift正在为每次单击将columns.name添加到columns数组中。

我读到非移位在I.E.中有一些问题。 8及更早,但我无法找到任何其他已知问题。

为什么每次调用csv下载时都会取消添加系列名称?

2 个答案:

答案 0 :(得分:0)

在示例中,他们将xAxis.categories推送到空数组列。然后,他们在列的第一个元素上使用unshift,这也是xAxis.categories。 unshift修改它所使用的数组,与返回修改后的数组的其他函数不同。列中的元素是对xAxis.categories的同一对象的引用,因此它正在修改该数组。如果您在jsFiddle上调整窗格大小,触发图表重绘,这将是显而易见的。所有这些都适用于series.yData。

他们需要做的是制作xAxis.categories数组和series.yData的深层副本,而不是仅仅将其推入columns数组。

if (xAxis.categories) {
  var tmpArr = [];
  $.each(xAxis.categories, function(index, value) {
    tmpArr.push(value); 
  });
  columns.push(tmpArr);
  columns[0].unshift("");
}
each (this.series, function (series) {
  var tmpArr = [];
  $.each(series.yData, function(index, value) {
    tmpArr.push(value); 
  });
  columns.push(tmpArr);
  columns[columns.length - 1].unshift(series.name);
});

http://jsfiddle.net/cqjvD/102/

尽管使用jQuery合并可能也是一种更简单的方法。

if (xAxis.categories) {
  columns.push($.merge([""], xAxis.categories);
}
each (this.series, function (series) {
  columns.push($.merge([series.name], series.yData));
});

答案 1 :(得分:0)

您还可以在导出后移动值:http://jsfiddle.net/cqjvD/104/

    each (this.series, function (series) {
        series.yData.shift();
    });
    xAxis.categories.shift();