ExcelJS Tool
Description
Read, manipulate, and write Excel spreadsheets with full formatting support.
Source
-
Repository: exceljs/exceljs
-
License: MIT
Installation
npm install exceljs
Usage Examples
Create Excel File
import ExcelJS from 'exceljs';
async function createReport() { const workbook = new ExcelJS.Workbook(); workbook.creator = 'My App'; workbook.created = new Date();
const sheet = workbook.addWorksheet('Sales Report');
// Define columns sheet.columns = [ { header: 'ID', key: 'id', width: 10 }, { header: 'Product', key: 'product', width: 30 }, { header: 'Quantity', key: 'quantity', width: 15 }, { header: 'Price', key: 'price', width: 15 }, { header: 'Total', key: 'total', width: 15 }, ];
// Add data const data = [ { id: 1, product: 'Widget A', quantity: 100, price: 9.99 }, { id: 2, product: 'Widget B', quantity: 50, price: 19.99 }, { id: 3, product: 'Widget C', quantity: 75, price: 14.99 }, ];
data.forEach(item => {
sheet.addRow({
...item,
total: { formula: C${sheet.rowCount + 1}*D${sheet.rowCount + 1} },
});
});
await workbook.xlsx.writeFile('report.xlsx'); }
Style Cells
async function createStyledReport() { const workbook = new ExcelJS.Workbook(); const sheet = workbook.addWorksheet('Styled');
// Header row with styling const headerRow = sheet.addRow(['Name', 'Email', 'Status']); headerRow.eachCell(cell => { cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: '4F46E5' }, }; cell.font = { color: { argb: 'FFFFFF' }, bold: true }; cell.alignment = { horizontal: 'center' }; cell.border = { top: { style: 'thin' }, bottom: { style: 'thin' }, }; });
// Data rows const users = [ { name: 'John', email: 'john@example.com', status: 'Active' }, { name: 'Jane', email: 'jane@example.com', status: 'Inactive' }, ];
users.forEach(user => { const row = sheet.addRow([user.name, user.email, user.status]);
// Conditional formatting
const statusCell = row.getCell(3);
statusCell.fill = {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: user.status === 'Active' ? '22C55E' : 'EF4444' },
};
});
await workbook.xlsx.writeFile('styled-report.xlsx'); }
Read Excel File
async function readExcel(filePath: string) { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.readFile(filePath);
const sheet = workbook.getWorksheet('Sheet1'); const data: any[] = [];
sheet?.eachRow((row, rowNumber) => { if (rowNumber === 1) return; // Skip header
data.push({
id: row.getCell(1).value,
name: row.getCell(2).value,
email: row.getCell(3).value,
});
});
return data; }
Stream Large Files
async function streamLargeExcel(data: any[], outputPath: string) { const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ filename: outputPath, useStyles: true, });
const sheet = workbook.addWorksheet('Data'); sheet.columns = [ { header: 'ID', key: 'id' }, { header: 'Value', key: 'value' }, ];
// Stream rows (memory efficient) for (const item of data) { sheet.addRow(item).commit(); }
await workbook.commit(); }
Tags
excel , spreadsheet , xlsx , report , data-export
Compatibility
-
Codex: ✅
-
Claude Code: ✅