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

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

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

ابدأ الدورة

العمل مع Excel في PHP: نظرة عامة على مكتبات PhpSpreadsheet وOpenSpout



العمل مع جداول بيانات Excel هو أحد أكثر المهام شيوعًا في تطوير الويب باستخدام PHP. سواء كان الأمر يتعلق بإنشاء التقارير، أو استيراد البيانات من الأنظمة المحاسبية، أو تصدير الإحصائيات للعملاء - لا يمكن الاستغناء عن أدوات العمل مع صيغ .xlsx و .xls. في هذه المقالة، سنستعرض اثنتين من أشهر مكتبات PHP: PhpSpreadsheet (خليفة PHPExcel الشهيرة) و OpenSpout (البديل الخفيف للملفات الكبيرة).



PhpSpreadsheet - أداة قوية ومتعددة الوظائف



PhpSpreadsheet هي مكتبة من مشروع PHPOffice تتيح قراءة وإنشاء وتعديل ملفات Excel (XLSX، XLS، ODS، CSV وغيرها). وهي تدعم تنسيق الخلايا، والصيغ، والرسوم البيانية، والتنسيق الشرطي، وحتى العمل مع وحدات الماكرو.



تثبيت PhpSpreadsheet

يتم التثبيت عبر Composer:

composer require phpoffice/phpspreadsheet


مثال: إنشاء ملف Excel بسيط

<?phprequire 'vendor/autoload.php';

use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;

$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();

// تعبئة البيانات$sheet->setCellValue('A1', 'ID');$sheet->setCellValue('B1', 'الاسم');$sheet->setCellValue('C1', 'البريد الإلكتروني');$sheet->setCellValue('A2', 1);$sheet->setCellValue('B2', 'إيفان بيتروف');$sheet->setCellValue('C2', 'ivan@example.com');

// تنسيق العنوان$styleArray = [ 'font' => ['bold' => true, 'size' => 14], 'fill' => ['fillType' => 'solid', 'startColor' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleArray);

// حفظ الملف$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');echo "تم إنشاء الملف users.xlsx!";?>


قراءة ملف Excel موجود

<?phprequire 'vendor/autoload.php';

use PhpOffice\\PhpSpreadsheet\\IOFactory;

$inputFileName = 'users.xlsx';$spreadsheet = IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();

foreach ($sheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $rowData = []; foreach ($cellIterator as $cell) { $rowData[] = $cell->getValue(); } echo implode(' | ', $rowData) . "<br>";}?>


OpenSpout - الخفة والسرعة للبيانات الكبيرة



OpenSpout هي مكتبة مصممة للعمل مع كميات كبيرة من البيانات (مئات الآلاف من الصفوف). على عكس PhpSpreadsheet، فهي لا تحمّل الملف بأكمله في الذاكرة، بل تعالجه بشكل تدفقي. وهذا يجعلها مثالية لتصدير/استيراد التقارير الضخمة. تدعم OpenSpout صيغ XLSX وCSV وODS.



تثبيت OpenSpout

composer require openspout/openspout


مثال: تصدير 100,000 صف إلى XLSX

<?phprequire 'vendor/autoload.php';

use OpenSpout\\Writer\\XLSX\\Writer;

$writer = new Writer();$writer->openToFile('big_export.xlsx');

// العناوين$writer->addRow(['ID', 'الاسم', 'البريد الإلكتروني']);

for ($i = 1; $i <= 100000; $i++) { $writer->addRow([$i, "مستخدم $i", "user$i@example.com"]);}

$writer->close();echo "تم إنشاء الملف big_export.xlsx بـ 100,000 صف!";?>


قراءة ملف كبير باستخدام OpenSpout

<?phprequire 'vendor/autoload.php';

use OpenSpout\\Reader\\XLSX\\Reader;

$reader = new Reader();$reader->open('big_export.xlsx');

foreach ($reader->getSheetIterator() as $sheet) { foreach ($sheet->getRowIterator() as $row) { $cells = $row->getCells(); echo implode(' | ', array_map(function($cell) { return $cell->getValue(); }, $cells)) . "<br>"; }}?>

توصيات