2014-09-23 8 views
0

Как изменить этот код так, что он будет производить данные csv на основе data groupingHighstock экспорт CSV на основе данных, группировка

(function(Highcharts) { 

    'use strict'; 

    Highcharts.Chart.prototype.downloadCSV = function(returnOutput) { 
     var titles = [], 
      xValues = [], 
      line, 
      csv = "", 
      col, 
      options = (this.options.exporting || {}).csv || {}, 
      totalSeries = 0, 
      xNeedsSorting = false, 

      // Options 
      dateFormat = options.dateFormat || '%d-%m-%Y', 
      itemDelimeter = options.itemDelimeter || ',', 
      url = options.url || '/service/Export/exportchartcsv.php', 
      lineDelimiter = options.lineDelimeter || '\n';  

     Highcharts.each(this.series, function(series, seriesNo) { 
      if (series.options.includeInCSVExport === true) return; 
      if (series.options.xAxis) { // if option is set and not zero 
       alert("Downloading charts as CSV with multiple axes is no supported, sorry."); 
       throw false; 
      } 

      if (titles.length === 0) { 
       var xTitle = ((series.xAxis.options || {}).title || {}).text; 

       if (xTitle) { 
        // series.xAxis.title.text exists and we use it 
       } else if (series.xAxis.isDatetimeAxis) { 
        xTitle = 'Date/Time'; 
        xNeedsSorting = true; 
       } else if (series.xAxis.categories) { 
        xTitle = 'Category'; 
       } else { 
        xTitle = 'X values'; 
       } 
       titles.push(xTitle); 
      } 

      titles.push(series.name.replace(/[^a-z0-9\s]/gi, '-')); 
      totalSeries++; 
     }); 

     Highcharts.each(this.series, function(series, seriesNo) {    
      if (series.options.includeInCSVExport === true) return;   
      //console.log(series.options.alternateData); 
      Highcharts.each(series.options.alternateData, function(point) { 
       var l = xValues.length; 
       while (l--) { 
        if (xValues[l].x === point[0]) {      
         xValues[l].y[seriesNo] = point[1]; 
         return; 
        } 
       } 

       var y = new Array(totalSeries); 
       y[-1] = point[0]; // -1nth element holds formatted x axis value    
       y[seriesNo] = point[1]; 
       if (series.xAxis.isDatetimeAxis) { 
        y[-1] = Highcharts.dateFormat(dateFormat, point[0]); 
       } else if (series.xAxis.categories) { 
        y[-1] = Highcharts.pick(series.xAxis.categories[point[0]], point[0]); 
       } 

       xValues.push({ x : point[0], y : y }); 
      }) 
     }); 

     if (xNeedsSorting) { 
      xValues.sort(function(a, b) {return a.x - b.x}); 
     } 
     csv = titles.join(itemDelimeter) + lineDelimiter; 
     Highcharts.each(xValues, function(values) { 
      line = []; 
      for (col = -1; col < values.y.length; col++) { 
       line.push(values.y[col]);    
      } 
      csv += line.join(itemDelimeter) + lineDelimiter; 
     }); 

     if (returnOutput) { 
      return csv; 
     } else { 
      var title = ((this.title || {}).text || 'chart') + '.csv', 
       a = document.createElement('a'); 

      if ("download" in a) { // modern browser - no need to use backend script 
       a.href = 'data:attachment/csv,' + encodeURIComponent(csv); 
       a.target = '_blank'; 
       a.download = title; 
       document.body.appendChild(a); 
       a.click(); 
       a.remove(); 
      } else { 
       Highcharts.post(url, { csv : csv, title : title }); 
      } 
     } 
    }; 

    Highcharts.Chart.prototype.getCSV = function() { 
     return this.downloadCSV(true); 
    }; 

    // Now we want to add "Download CSV" to the exporting menu. We post the CSV 
    // to a simple PHP script that returns it with a content-type header as a 
    // downloadable file. 
    // The source code for the PHP script can be viewed at 
    // https://raw.github.com/highslide-software/highcharts.com/master/studies/csv-export/csv.php 
    if (Highcharts.getOptions().exporting) { 
     Highcharts.getOptions().exporting.buttons.contextButton.menuItems.push({ 
      text : Highcharts.getOptions().lang.downloadCSV || "Export Data", 
      onclick : function() { this.downloadCSV() } 
     }); 
    } 
}(Highcharts)); 

ответ

0

Прежде всего, вы используете старую версию Export-CSV, JS плагин для Highcharts. Загрузите фактический номер от gitHub.

Затем в #31 и #47 линиях вы увидите series.xData.slice()/series.yData.slice(). Эти массивы содержат исходные значения x/y. Если вы хотите значения после dataGrouping (когда применяются приближение), то изменить из й/yData к й/yProcessedXData:

series.processedXData.slice(); 
series.processedYData.slice(); 
+0

причина, по которой я использовал старую версию, потому что у меня есть график, где ось х DateTime и я не хочу, когда пользователь экспортирует в CSV, xAxis будет печатать для каждой серии, которую я имею в диаграмме. – Muhaimin

+0

Какую версию Highstock вы используете? Это очень важная информация. –

+0

'v2.0.1'. это сильно отличается от новейшей? – Muhaimin

Смежные вопросы