An OOXML (xlsx) generator that supports formatting options
npm install excel4node
A sample.js script is provided in the code. Running this will output a sample excel workbook named Excel.xlsx
node sample.js
Instantiate a new workook Takes optional params object to specify jszip options. More to come.
var xl = require('excel4node');
var wb = new xl.WorkBook();
var wbOpts = {
jszip:{
compression:'DEFLATE'
}
}
var wb2 = new xl.WorkBook(wbOpts);
Add a new WorkSheet to the workbook Takes optional params object to specify page margins, zoom and print view centering and whether to fit to page on print.
var ws = wb.WorkSheet('New Worksheet');
var wsOpts = {
margins:{
left : .75,
right : .75,
top : 1.0,
bottom : 1.0,
footer : .5,
header : .5
},
printOptions:{
centerHorizontal : true,
centerVertical : false
},
view:{
zoom : 100
},
outline:{
summaryBelow : true
},
fitToPage:{
fitToHeight: 100,
orientation: 'landscape',
},
}
var ws2 = wb.WorkSheet('New Worksheet', wsOpts);
Optionally, you can set validations for the WorkSheet
ws.setValidation({
type: "list",
allowBlank: 1,
showInputMessage: 1,
showErrorMessage: 1,
sqref: "X2:X10",
formulas: [
'value1,value2'
]
});
Add a cell to a WorkSheet with some data.
Cell can take 4 data types: String, Number, Formula, Date, Link.
Cell takes two arguments: row, col
ws.Cell(1,1).String('My String');
ws.Cell(2,1).Number(5);
ws.Cell(2,2).Number(10);
ws.Cell(2,3).Formula("A2+B2");
ws.Cell(2,4).Formula("A2/C2");
ws.Cell(2,5).Date(new Date());
ws.Cell(2,6).Link('http://google.com'); or ws.Cell(2,6).Link('http://google.com','Link name');
Set Dimensions of Rows or Columns
ws.Row(1).Height(30);
ws.Column(1).Width(100);
Create a Style and apply it to a cell
- Font
- Bold
- Takes no arguments. Bolds text
- Italics
- Takes no arguments. Italicizes text
- Underline
- Takes no arguments. Underlines text
- Family
- Takes one argument: name of font family.
- Color
- Takes one argument: rbg color
- Size
- Takes one argument: size in Pts
- WrapText
- Takes no arguments. Set text wrapping to true.
- Alignment
- Vertical
- Takes one argument of options top, center, bottom
- Horizontal
- Takes one argument of left, center, right
- Rotation
- Takes one argument as degrees to rotate
- Vertical
- Bold
- Number
- Format
- Takes one argument: Number style string
- Format
- Fill
- Color
- Takes one argument: Color in rgb
- Pattern
- Takes one argument: pattern style (solid, lightUp, etc)
- Color
- Border
- Takes one argument: object defining border
- each ordinal (top, right, etc) are only required if you want to define a border. If omitted, no border will be added to that side.
- style is required if oridinal is defined. if color is omitted, it will default to black.
{
top:{
style:'thin',
color:'CCCCCC'
},
right:{
style:'thin',
color:'CCCCCC'
},
bottom:{
style:'thin',
color:'CCCCCC'
},
left:{
style:'thin',
color:'CCCCCC'
},
diagonal:{
style:'thin',
color:'CCCCCC'
}
}
var myStyle = wb.Style();
myStyle.Font.Bold();
myStyle.Font.Italics();
myStyle.Font.Underline();
myStyle.Font.Family('Times New Roman');
myStyle.Font.Color('FF0000');
myStyle.Font.Size(16);
myStyle.Font.Alignment.Vertical('top');
myStyle.Font.Alignment.Horizontal('left');
myStyle.Font.Alignment.Rotation('90');
myStyle.Font.WrapText(true);
var myStyle2 = wb.Style();
myStyle2.Font.Size(14);
myStyle2.Number.Format("$#,##0.00;($#,##0.00);-");
var myStyle3 = wb.Style();
myStyle3.Font.Size(14);
myStyle3.Number.Format("##%");
myStyle3.Fill.Pattern('solid');
mystyle3.Fill.Color('CCCCCC');
myStyle3.Border({
top:{
style:'thin',
color:'CCCCCC'
},
bottom:{
style:'thick'
},
left:{
style:'thin'
},
right:{
style:'thin'
}
});
ws.Cell(1,1).Style(myStyle);
ws.Cell(1,2).String('My 2nd String').Style(myStyle);
ws.Cell(2,1).Style(myStyle2);
ws.Cell(2,2).Style(myStyle2);
ws.Cell(2,3).Style(myStyle2);
ws.Cell(2,4).Style(myStyle3);
Apply Formatting to Cell Syntax similar to creating styles
ws.Cell(1,1).Format.Font.Color('FF0000');
ws.Cell(1,1).Format.Fill.Pattern('solid');
ws.Cell(1,1).Format.Fill.Color('AEAEAE');
Merge Cells and apply Styles or Formats to ranges ws.Cell(row1,col1,row2,col2,merge)
ws.Cell(1,1,2,5,true).String('Merged Cells');
ws.Cell(3,1,4,5).String('Each Cell in Range Contains this String');
ws.Cell(3,1,4,5).Style(myStyle);
ws.Cell(1,1,2,5).Format.Font.Family('Arial');
Freeze Columns and Rows to prevent moving when scrolling horizontally
First example will freeze the first two columns (everything prior to the specified column);
Second example will freeze the first two columns and scroll to the 8th column.
Third example will freeze the first two rows (everything prior to the specified row);
Forth example will freeze the first two rows and scroll to the 8th row.
See "Series with frozen Row" tab in sample output workbook
ws.Column(3).Freeze();
ws.Column(3).Freeze(8);
ws.Row(3).Freeze();
ws.Row(3).Freeze(8);
Set a row to be a filter row Optionally specify start and end columns If no arguments passed, will add filter to any populated columns See "Departmental Spending Report" tab in sample output workbook
ws.Row(1).Filter();
ws.Row(1).Filter(1,8);
Hide a specific Row or Column
ws.Row(2).Hide();
ws.Column(2).Hide();
Set Groupings on Rows and optionally collapse them.
See "Groupings Summary Top" and "Groupings Summary Bottom" in sample output.
ws.Row(rowNum).Group(level,isCollapsed)
ws.Row(1).Group(1,true)
Insert an image into a WorkSheet for
Image takes one argument which is relative path to image from node script
Image can be passed optional Position which takes 4 arguments
img.Position(row, col, [rowOffset], [colOffset])
row = top left corner of image will be anchored to top of this row
col = top left corner of image will be anchored to left of this column
rowOffset = offset from top of row in EMUs
colOfset = offset from left of col in EMUs
Currently images should be saved at a resolution of 96dpi.
var img1 = ws.Image(imgPath);
img1.Position(1,1);
var img2 = ws.Image(imgPath2).Position(3,3,1000000,2000000);
Write the Workbook to local file synchronously or Write the Workbook to local file asynchrously or Send file via node response
wb.write("My Excel File.xlsx");
wb.write("My Excel File.xlsx",function(err){ ... });
wb.write("My Excel File.xlsx",res);