Экспорт данных из старших графиков в CSV-файл с датами в миллисекундах - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть приложение angularjs с библиотекой Highcharts.

В моем приложении у меня есть несколько графиков, и я хочу экспортировать данные графиков в файл CSV.Поэтому я использовал функцию экспорта из старших графиков, но у меня проблема с датами.На моих графиках я отображаю даты в формате «ММ / ДД / ГГГГ чч: мм: сс», поэтому при экспорте данных у меня тот же формат, но у меня будут даты в миллисекундах.Я пытаюсь изменить поле 'dateFormat' в опциях экспорта, но миллисекунды не являются частью принятых форматов.

Это мои параметры графика:

widgetCtrl.chartDataLine = {
    chart: {
        type: 'spline',
        zoomType: 'x',
        isZoomed: false,
        marginTop:55
    },
    title: {
        text: 'title',
        align:'left',
        x: 20,
        y: 18,
        style: {
            fontSize: '14px'
        }
    },
    xAxis: {
        type: 'datetime',
        title: {
            text: 'Date time'
        }
    },
    yAxis: {
        title: {
            text: 'Power (W)'
        }
    },
    boost: {
        enabled: true
    },
    exporting: {
        fallbackToExportServer: false,
        enabled: true,
        allowHTML: true,
        filename: 'myFile',
        menuItemDefinitions: {
            downloadJSON: {
                onclick: function () {
                    downloadJSON('myFile.JSON', widgetCtrl.chartDataLine.series);
                },
                text: 'Download JSON'
            }
        },
        csv: {
            decimalPoint: '.',
            dateFormat: '%Y-%m-%d %H:%M:%S'
        },
        buttons: {
            contextButton: {
                menuItems: [
                    'printChart',
                    'downloadPNG',
                    'downloadJPEG',
                    'downloadPDF',
                    'downloadSVG',
                    'downloadCSV',
                    'downloadJSON'
                ]
            }
        }
    },
    navigation: {
        buttonOptions: {
            align: 'left'
        }
    }
    series: [...]
};

У вас есть представление, какЯ могу сделать это, не записывая себя в CSV-файл, но используя функции highcharts?

1 Ответ

0 голосов
/ 27 ноября 2018

К сожалению, Highcharts не имеет опции по умолчанию для экспорта данных в миллисекундах (отметка времени).Однако это можно легко сделать с помощью метода wrapping Highcharts.Chart.prototype.getDataRows и сопоставить массив данных, который используется для экспорта.

(function(H) {
  H.wrap(H.Chart.prototype, 'getDataRows', function(proceed, multiLevelHeaders) {
    var rows = proceed.call(this, multiLevelHeaders);

    rows = rows.map(row => {
      if (row.x) {
        row[0] = row.x;
      }
      return row;
    });

    return rows;
  });
}(Highcharts));

Демонстрация: https://jsfiddle.net/BlackLabel/5p1nvq37/

...