العمل مع Excel في PHP: مكتبات PhpSpreadsheet وPhpOffice
في تطوير الويب الحديث، غالبًا ما تنشأ الحاجة لتصدير البيانات إلى تنسيق Excel، أو استيراد التقارير، أو معالجة الجداول على جانب الخادم. تقدم PHP عدة مكتبات قوية للعمل مع ملفات .xlsx و .xls و .ods. في هذه المقالة، سنستعرض بالتفصيل PhpSpreadsheet — المكتبة الحديثة والنشطة التي حلت محل PHPExcel القديمة.
ما هي PhpSpreadsheet؟
PhpSpreadsheet هي مكتبة لقراءة وكتابة وتحرير جداول البيانات بتنسيقات مختلفة: Excel و OpenDocument و CSV و HTML و PDF. وهي مكتوبة بلغة PHP النقية، ولا تتطلب تثبيت إضافات إضافية (باستثناء الإضافات القياسية zip و xml)، وتدعم جميع إمكانيات Excel الأساسية: الأنماط، الصيغ، الرسوم البيانية، التنسيق الشرطي، أوراق متعددة، وغير ذلك الكثير.
التثبيت
يتم التثبيت عبر Composer:
composer require phpoffice/phpspreadsheetبعد التثبيت، يظهر مجلد vendor مع التحميل التلقائي في المشروع. لبدء العمل، يكفي تضمين المحمل التلقائي:
require 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;إنشاء ملف Excel بسيط
لننظر إلى مثال أساسي: سننشئ ملفًا بعناوين وعدة صفوف من البيانات.
// إنشاء كائن Spreadsheet جديد$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// تعيين العناوين$sheet->setCellValue('A1', 'الاسم') ->setCellValue('B1', 'البريد الإلكتروني') ->setCellValue('C1', 'تاريخ التسجيل');
// ملء البيانات$sheet->setCellValue('A2', 'إيفان إيفانوف') ->setCellValue('B2', 'ivan@example.com') ->setCellValue('C2', '2024-01-15');
$sheet->setCellValue('A3', 'ماريا بيتروفا') ->setCellValue('B3', 'maria@example.com') ->setCellValue('C3', '2024-02-20');
// حفظ الملف$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');
echo "تم إنشاء الملف users.xlsx بنجاح!";بعد تشغيل السكريبت، سيظهر ملف users.xlsx في جذر المشروع، ويمكن فتحه في Excel أو Google Sheets.
قراءة ملف Excel موجود
تتيح PhpSpreadsheet قراءة البيانات بسهولة من أي تنسيق. مثال على تحميل وعرض المحتوى:
$inputFileName = 'users.xlsx';$spreadsheet = \\PhpOffice\\PhpSpreadsheet\\IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
// قراءة جميع الصفوف$data = $sheet->toArray();
foreach ($data as $row) { echo implode(' | ', $row) . "";}تعيد الدالة toArray() مصفوفة ثنائية الأبعاد، حيث العنصر الأول هو صف بمؤشرات 0,1,2... يمكنك الوصول إلى الخلايا بالعنوان: $sheet->getCell('A2')->getValue().
العمل مع الأنماط والتنسيق
من نقاط القوة في PhpSpreadsheet التحكم المرن في مظهر الجدول.
$styleArray = [ 'font' => [ 'bold' => true, 'size' => 12, 'color' => ['argb' => 'FF2E4057'], ], 'fill' => [ 'fillType' => \\PhpOffice\\PhpSpreadsheet\\Style\\Fill::FILL_SOLID, 'startColor' => ['argb' => 'FFD9E2EC'], ], 'borders' => [ 'allBorders' => [ 'borderStyle' => \\PhpOffice\\PhpSpreadsheet\\Style\\Border::BORDER_THIN, ], ],];
// تطبيق النمط على النطاق$sheet->getStyle('A1:C1')->applyFromArray($styleArray);
// العرض التلقائي للأعمدةforeach (range('A','C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}تصدير البيانات من قاعدة البيانات إلى Excel
غالبًا ما يكون مطلوبًا تفريغ نتائج استعلام SQL. مثال باستخدام PDO: