العمل مع Excel في PHP: مكتبات PhpSpreadsheet و OpenSpout

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع 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                    

توصيات