Git Product home page Git Product logo

xlsx-chart's Introduction

xlsx-chart

Node.js excel chart builder

Quick start

Install

npm install xlsx-chart

Generate and write chart to file

var XLSXChart = require ("xlsx-chart");
var xlsxChart = new XLSXChart ();
var opts = {
	file: "chart.xlsx",
	chart: "column",
	titles: [
		"Title 1",
		"Title 2",
		"Title 3"
	],
	fields: [
		"Field 1",
		"Field 2",
		"Field 3",
		"Field 4"
	],
	data: {
		"Title 1": {
			"Field 1": 5,
			"Field 2": 10,
			"Field 3": 15,
			"Field 4": 20 
		},
		"Title 2": {
			"Field 1": 10,
			"Field 2": 5,
			"Field 3": 20,
			"Field 4": 15
		},
		"Title 3": {
			"Field 1": 20,
			"Field 2": 15,
			"Field 3": 10,
			"Field 4": 5
		}
	}
};
xlsxChart.writeFile (opts, function (err) {
  console.log ("File: ", opts.file);
});

Generate and download chart data

xlsxChart.generate (opts, function (err, data) {
	res.set ({
	  "Content-Type": "application/vnd.ms-excel",
	  "Content-Disposition": "attachment; filename=chart.xlsx",
	  "Content-Length": data.length
	});
	res.status (200).send (data);
});

Chart types

column, bar, line, area, radar, scatter, pie

Mixing

You can mix column, bar, line, area.

Custom template

Default templates: xlsx-chart/template/*.xlsx

var opts = {
	file: "chart.xlsx",
	chart: "column",
	templatePath: __dirname + "/myColumn.xlsx",
	...
};
xlsxChart.writeFile (opts, function (err) {
  console.log ("File: ", opts.file);
});

Multiple charts (one type)

Only column chart. For other types use custom template.

let fs = require ("fs");
let XLSXChart = require ("xlsx-chart");
let xlsxChart = new XLSXChart ();
let opts = {
	charts: [{
		chart: "column",
		titles: [
			"Title 1",
			"Title 2",
			"Title 3"
		],
		fields: [
			"Field 1",
			"Field 2",
			"Field 3",
			"Field 4"
		],
		data: {
			"Title 1": {
				"Field 1": 5,
				"Field 2": 10,
				"Field 3": 15,
				"Field 4": 20
			},
			"Title 2": {
				"Field 1": 10,
				"Field 2": 5,
				"Field 3": 20,
				"Field 4": 15
			},
			"Title 3": {
				"Field 1": 20,
				"Field 2": 15,
				"Field 3": 10,
				"Field 4": 5
			}
		},
		chartTitle: "Title 1"
	}, {
		chart: "column",
		titles: [
			"Title 1",
			"Title 2",
			"Title 3"
		],
		fields: [
			"Field 1",
			"Field 2",
			"Field 3",
			"Field 4"
		],
		data: {
			"Title 1": {
				"Field 1": 5,
				"Field 2": 10,
				"Field 3": 15,
				"Field 4": 20
			},
			"Title 2": {
				"Field 1": 10,
				"Field 2": 5,
				"Field 3": 20,
				"Field 4": 15
			},
			"Title 3": {
				"Field 1": 20,
				"Field 2": 15,
				"Field 3": 10,
				"Field 4": 5
			}
		},
		chartTitle: "Title 2"
	}, {
		chart: "column",
		titles: [
			"Title 1",
			"Title 2",
		],
		fields: [
			"Field 1",
			"Field 2",
			"Field 3",
		],
		data: {
			"Title 1": {
				"Field 1": 15,
				"Field 2": 30,
				"Field 3": 45,
			},
			"Title 2": {
				"Field 1": 5,
				"Field 2": 2,
				"Field 3": 10
			}
		},
		chartTitle: "Title 3"
	}]
};
xlsxChart.generate (opts, function (err, data) {
	fs.writeFileSync ("chart.xlsx", data);
});

Available chart options

var opts = {
	file: "chart.xlsx", // exported file
	type: "nodebuffer", // optional: used by JSZip library
	charts: [
		{
			chart: "column", // pie, doughnut, line, area, bar
			grouping: "clustered", // optional: stacked, standard - allow to create stacked bar or line chart
			titles: [
				"title1", // list of chart titles
				"title2", // list of chart titles
			],
			fields: [
				"field1", // list of chart fields
				"field2",
			],
			data: {
				// chart: "column", // could be used to create multi-layer charts with e.g. column + bar + line + area chart in the same object
				// grouping: "clustered", // same as common grouping option, but only for current layer;
				"title1": {
					"field1": 123, // structured data
					"field2": 321,
				},
				"title2": {
					"field1": 456,
					"field2": 654,
				},
			},
			chartTitle: "Title",
			position: { // optional: chart position
				fromColumn: 0, 			// chart top left x coordinate in columns
				fromColumnOffset: 0, 	// chart top left x coordinate in pixels
				fromRow: n * 20, 		// chart top left y coordinate in columns
				fromRowOffset: 0, 		// chart top left y coordinate in pixels
				toColumn: 10, 			// chart bottom right x coordinate in columns
				toColumnOffset: 0, 		// chart bottom right x coordinate in pixels
				toRow: (n + 1) * 20, 	// chart bottom right y coordinate in columns
				toRowOffset: 0, 		// chart bottom right y coordinate in pixels
			},
			customColors: { // optional: chart colors
				points: {
					"title1": {
						"field1": "FF0000", // colors in the same structure as data; not all points required
						"field1": {
							fill: "FF0000", // separate colors for fill and border could be set
							line: "FF0000",
						},
					},
				},
				series: {
					"title1": "FF0000", // whole series color could be also set
					"title2": {
						fill: "FF0000", // separate colors for fill and border could be set
						line: "FF0000",
						markerColor: "FF0000", // different marker color also could be set for line chart
					},
				},
			},
			manualLayout: { // optional blocks position on the chart canvas
				plotArea: { // chart position
					x: 0.5, // x and y of top left corner in proportion value 0..1
					y: 0.5,
					w: 0.5, // width and height of block point in proportion value 0..1
					h: 0.5,
				},
				title: {
					x: 0.5, // x and y of top left corner in proportion value 0..1
					y: 0.5,
				},
			},
			firstSliceAng: 270, // optional: first slice angle for pie and doughnut chart in degrees
			holeSize: 50, // optional: hole size of doughnut chart in percent
			legendPos: "r", // optional: 'l', 't', 'r', 'b', null - legend position; null to hide; right is default
			deleteEmptyCells: false, // optional: allow to will empty values with 0 or leave as gaps
		},
	],
};

xlsxChart.writeFile (opts, function (err) {
  console.log ("File: ", opts.file);
});

Examples

column.js
alt tag
bar.js
alt tag
line.js
alt tag
area.js
alt tag
radar.js
alt tag
scatter.js
alt tag
pie.js
alt tag
columnLine.js
alt tag
mix.js
alt tag

Author

Dmitriy Samortsev

Copyright and license

MIT

xlsx-chart's People

Contributors

objectum avatar samortsev avatar tsenzuk avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.