0

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

多次点击“Alert CSV”按钮,您将开始看到每次点击时系列名称都会重复,从而导致 csv 输出结构不正确。

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

我还尝试添加 series.name ,前提是它不是列数组的一部分,但这也不起作用。Unshift 为每次点击将 series.name 添加到 columns 数组中。

我读到 unshift 在 IE 8 及更早版本中存在一些问题,但我找不到任何其他已知问题。

为什么每次调用 csv 下载时 unshift 添加系列名称?

4

2 回答 2

0

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

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

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));
});
于 2013-05-24T20:25:19.213 回答
0

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

    each (this.series, function (series) {
        series.yData.shift();
    });
    xAxis.categories.shift();
于 2013-05-27T13:22:31.200 回答