ExcelJS Tool
Description
Read, manipulate, and write Excel spreadsheets with full formatting support.
Source
- •Repository: exceljs/exceljs
- •License: MIT
Installation
bash
npm install exceljs
Usage Examples
Create Excel File
typescript
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
typescript
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
typescript
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
typescript
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: ✅