العمل مع Excel في PHP: نظرة عامة على أفضل المكتبات
معالجة جداول البيانات هي إحدى المهام الشائعة في تطوير الويب. في PHP، توجد عدة أدوات موثوقة لإنشاء وقراءة وتحرير ملفات Excel. في هذه المقالة، سنستعرض مكتبتين رئيسيتين: PhpSpreadsheet (خليفة PHPExcel الشهير) و OpenSpout خفيفة الوزن، المصممة للكتابة والقراءة السريعة للملفات الكبيرة.
1. التثبيت عبر Composer
يتم تثبيت كلتا المكتبتين باستخدام مدير الحزم القياسي Composer. قم بتنفيذ الأمر التالي في الطرفية في جذر المشروع:
# لـ PhpSpreadsheet (عمل متكامل مع Excel)composer require phpoffice/phpspreadsheet
# لـ OpenSpout (أداء عالي على البيانات الكبيرة)composer require openspout/openspoutبعد التثبيت، قم بتضمين التحميل التلقائي في بداية السكريبت:
require_once __DIR__ . '/vendor/autoload.php';2. PhpSpreadsheet: إنشاء وتنسيق ملفات Excel
تدعم المكتبة تنسيقات XLSX و XLS و ODS و CSV وغيرها. تسمح بالتحكم في الأنماط، دمج الخلايا، إدراج الصور والصيغ.
مثال: إنشاء تقرير بسيط
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;use PhpOffice\\PhpSpreadsheet\\Style\\Alignment;
$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// العناوين$sheet->setCellValue('A1', 'المنتج');$sheet->setCellValue('B1', 'الكمية');$sheet->setCellValue('C1', 'السعر، روبل');
// البيانات$data = [ ['لابتوب', 5, 45000], ['شاشة', 10, 15000], ['لوحة مفاتيح', 20, 2500],];$row = 2;foreach ($data as $item) { $sheet->setCellValue("A{$row}", $item[0]); $sheet->setCellValue("B{$row}", $item[1]); $sheet->setCellValue("C{$row}", $item[2]); $row++;}
// صيغة المجموع$sheet->setCellValue("A{$row}", 'المجموع');$sheet->setCellValue("C{$row}", "=SUM(C2:C" . ($row-1) . ")");
// تنسيق العناوين$styleHeader = [ 'font' => ['bold' => true, 'size' => 12], 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], 'fill' => ['fillType' => \\PhpOffice\\PhpSpreadsheet\\Style\\Fill::FILL_SOLID, 'color' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleHeader);
// العرض التلقائي للأعمدةforeach (range('A', 'C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}
// الحفظ$writer = new Xlsx($spreadsheet);$writer->save('report.xlsx');echo "تم إنشاء الملف report.xlsx!";قراءة ملف XLSX موجود
use PhpOffice\\PhpSpreadsheet\\IOFactory;
$inputFileName = 'example.xlsx';$spreadsheet = IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
$highestRow = $sheet->getHighestRow();$highestColumn = $sheet->getHighestColumn();
for ($row = 1; $row <= $highestRow; $row++) { $rowData = $sheet->rangeToArray("A{$row}:{$highestColumn}{$row}", NULL, TRUE, FALSE); echo implode(', ', $rowData[0]) . "<br>";}3. OpenSpout: العمل السريع مع الجداول الكبيرة
تم تحسين OpenSpout للكتابة والقراءة التدفقية. لا يدعم الأنماط والصيغ، لكنه مثالي لتصدير آلاف الصفوف من البيانات (مثل تفريغ قاعدة البيانات).
مثال: كتابة 10,000 صف في CSV/XLSX
use OpenSpout\\Writer\\XLSX\\Writer;use OpenSpout\\Common\\Entity\\Row;
$writer = new Writer();$writer->openToFile('big_export.xlsx');
// العناوين$headerRow = Row::fromValues(['ID', 'الاسم', 'البريد الإلكتروني']);$writer->addRow($headerRow);
for ($i = 1; $i <= 10000; $i++) { $row = Row::fromValues([$i, "User{$i}", "user{$i}@example.com"]); $writer->addRow($row);}
$writer->close();echo "تم التصدير بنجاح!";قراءة ملف XLSX كبير سطراً بسطر
use OpenSpout\\Read