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 配列に直接追加しようとしましたが、同じ出力を受け取ります。

また、列配列の一部ではない場合にのみ series.name を追加しようとしましたが、それも機能しませんでした。Unshift は、クリックごとに series.name を columns 配列に追加しています。

unshift には IE 8 以前でいくつかの問題があることを読みましたが、その他の既知の問題は見つかりませんでした。

csv ダウンロードが呼び出されるたびに unshift がシリーズ名を追加するのはなぜですか?

4

2 に答える 2

0

この例では、xAxis.categories を空の配列列にプッシュします。次に、列の最初の要素である xAxis.categories で unshift を使用します。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));
});
于 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 に答える