Как изменить этот код так, что он будет производить данные 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));
причина, по которой я использовал старую версию, потому что у меня есть график, где ось х DateTime и я не хочу, когда пользователь экспортирует в CSV, xAxis будет печатать для каждой серии, которую я имею в диаграмме. – Muhaimin
Какую версию Highstock вы используете? Это очень важная информация. –
'v2.0.1'. это сильно отличается от новейшей? – Muhaimin