العمل مع Excel في JavaScript (Node.js)
غالبًا ما تتطلب تطوير الويب الحديث التفاعل البرمجي مع جداول البيانات. تصدير التقارير، استيراد البيانات من أنظمة المحاسبة، معالجة كميات كبيرة من المعلومات — كل هذا يجعل العمل مع Excel في Node.js مهمة مطلوبة. في هذه المقالة، سنستعرض ثلاث مكتبات الأكثر شيوعًا للعمل مع تنسيق XLSX: xlsx، exceljs و excel4node. ستتعلم كيفية تثبيت كل منها، وإنشاء ملفات Excel وتحريرها وقراءتها.
مكتبة xlsx (SheetJS)
xlsx هي المكتبة الأكثر شيوعًا وخفيفة الوزن للعمل مع الجداول في Node.js. وهي تدعم ليس فقط XLSX، بل أيضًا XLS و CSV و ODS وتنسيقات أخرى. الميزة الرئيسية هي بساطة واجهة برمجة التطبيقات (API) وسرعة الأداء العالية.
التثبيت:
npm install xlsxمثال: إنشاء وكتابة ملف Excel
const XLSX = require('xlsx');
// إنشاء ورقة عمل بالبياناتconst data = [ { الاسم: 'آنا', العمر: 28, المدينة: 'موسكو' }, { الاسم: 'إيفان', العمر: 35, المدينة: 'سانت بطرسبرغ' }, { الاسم: 'أولغا', العمر: 22, المدينة: 'قازان' }];
const worksheet = XLSX.utils.json_to_sheet(data);const workbook = XLSX.utils.book_new();XLSX.utils.book_append_sheet(workbook, worksheet, 'الموظفون');
// حفظ الملفXLSX.writeFile(workbook, 'employees.xlsx');console.log('تم إنشاء ملف employees.xlsx!');مثال: قراءة ملف موجود
const workbook = XLSX.readFile('employees.xlsx');const sheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[sheetName];const jsonData = XLSX.utils.sheet_to_json(worksheet);
console.log('البيانات من الملف:', jsonData);المزايا:
- حجم صغير (حوالي 50 كيلوبايت عند الضغط)
- دعم تنسيقات متعددة (XLSX، XLS، CSV، ODS)
- واجهة برمجة تطبيقات بسيطة للتحويل بين JSON ↔ جدول
العيوب:
- إمكانيات تنسيق محدودة (أنماط، خطوط، ألوان)
- صعوبات مع الخلايا المدمجة والصيغ المعقدة
مكتبة exceljs
exceljs هي مكتبة متقدمة للعمل مع ملفات XLSX. توفر تحكمًا كاملاً في التنسيق: يمكنك إدارة الخطوط والألوان والحدود والخلايا المدمجة والتنسيق الشرطي وحتى إضافة الصور.
التثبيت:
npm install exceljsمثال: إنشاء تقرير منسق
const ExcelJS = require('exceljs');
async function createReport() { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('التقرير');
// تعريف الأعمدة worksheet.columns = [ { header: 'المنتج', key: 'product', width: 20 }, { header: 'الكمية', key: 'quantity', width: 15 }, { header: 'السعر', key: 'price', width: 15 } ];
// إضافة البيانات worksheet.addRow({ product: 'لابتوب', quantity: 10, price: 75000 }); worksheet.addRow({ product: 'فأرة', quantity: 50, price: 1500 });
// تنسيق العنوان const headerRow = worksheet.getRow(1); headerRow.font = { bold: true, color: { argb: 'FFFFFFFF' } }; headerRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF4472C4' } };
// تنسيق خلايا الأسعار const priceColumn = worksheet.getColumn(3); priceColumn.numFmt = '#,##0.00';
// الحفظ await workbook.xlsx.writeFile('report.xlsx'); console.log('تم إنشاء التقرير مع التنسيق!');}
createReport();مثال: قراءة وتعديل ملف
const workbook = new ExcelJS.Workbook();await workbook.xlsx.readFile('report.xlsx');const worksheet = w