تدمج هذه الحزمة تطبيق Symfony 4/5/6/7 مع مكتبة إنتاجية PHPOffice PhpSpreadsheet.
تتطلب هذه الحزمة، بالإضافة إلى المتطلبات الأساسية لكل مكتبة PHPOffice:
* PHP 7.2 or higher
* Symfony 4 or higher
ملاحظة: العلامات الأقدم من v1.0.0 (على سبيل المثال، v0.2.0) لم تعد مدعومة بسبب حالة الإهمال لكل من PHP <= 7.1 وSymfony <= 4.4.
استخدم الملحن للمطالبة بأحدث إصدار ثابت.
composer require yectep/phpspreadsheet-bundle إذا كنت لا تستخدم Flex، فقم بتمكين الحزمة في ملف AppKernel.php أو bundles.php .
$ bundles = array (
[...]
new Yectep PhpSpreadsheetBundle PhpSpreadsheetBundle (),
); تتيح هذه الحزمة خدمة phpoffice.spreadsheet .
راجع أيضًا وثائق PHPOffice PhpSpreadsheet الرسمية.
إنشاء كائن PhpOfficePhpSpreadsheetSpreadsheet فارغ، أو، إذا تم تمرير $filename اختياري، قم بإنشاء مثيل PhpOfficePhpSpreadsheetIOFactory لاكتشاف فئة IWriter المناسبة واستخدامها لقراءة الملف تلقائيًا.
// In your controller
$ newSpreadsheet = $ this -> get ( ' phpoffice.spreadsheet ' )-> createSpreadsheet ();
$ existingXlsx = $ this -> get ( ' phpoffice.spreadsheet ' )-> createSpreadsheet ( ' /path/to/file.xlsx ' );string نوع $) تقوم بإرجاع مثيل للفئة PhpOfficePhpSpreadsheetReader من $type المحدد.
الأنواع حساسة لحالة الأحرف. الأنواع المدعومة هي:
Xlsx : إكسل 2007Xls : إكسل 5/بيف (95)Xml : إكسل 2003 إكس إم إلSlk : الرابط الرمزي (SYLK)Ods : المكتب المفتوح/الحرة (ODS)Csv : ملف CSVHtml : أتش تي أم أل $ readerXlsx = $ this -> get ( ' phpoffice.spreadsheet ' )-> createReader ( ' Xlsx ' );
$ spreadsheet = $ readerXlsx -> load ( ' /path/to/file.xlsx ' );Spreadsheet $spreadsheet، string $type) بالنظر إلى كائن PhpOfficePhpSpreadsheetSpreadsheet وكاتب $type ، يتم إرجاع مثيل لفئة PhpOfficePhpSpreadsheetWriter لهذا النوع.
بالإضافة إلى أنواع القراءة المذكورة أعلاه، يتم دعم هذه الأنواع أيضًا للكتابة، إذا تم تثبيت مكتبات PHP المناسبة.
TcpdfMpdfDompdf $ spreadsheet = $ this -> get ( ' phpoffice.spreadsheet ' )-> createSpreadsheet ();
$ spreadsheet -> getActiveSheet ()-> setCellValue ( ' A1 ' , ' Hello world ' );
$ writerXlsx = $ this -> get ( ' phpoffice.spreadsheet ' )-> createWriter ( $ spreadsheet , ' Xlsx ' );
$ writerXlsx -> save ( ' /path/to/destination.xlsx ' );المساهمات هي أكثر من موضع ترحيب. قم بتفرع المشروع، وأرسل PR عند الانتهاء.
تشمل المهام المتبقية ما يلي:
إذا كنت تقوم بالترحيل من مكون Symfony Serializer + برنامج تشفير CSV - فيمكنك استخدام رمز مثل
$ spreadsheet = $ this -> get ( ' phpoffice.spreadsheet ' )-> createSpreadsheet ();
$ sheet = $ spreadsheet -> getActiveSheet ();
$ sheet -> setTitle ( $ this -> filterVars [ ' wareCategory ' ]-> getTitle ());
$ columnsMap = [];
$ lineIndex = 2 ;
foreach ( $ data as $ line ) {
foreach ( $ line as $ columnName => $ columnValue ) {
if ( is_int ( $ columnIndex = array_search ( $ columnName , $ columnsMap ))) {
$ columnIndex ++;
} else {
$ columnsMap [] = $ columnName ;
$ columnIndex = count ( $ columnsMap );
}
$ sheet -> getCellByColumnAndRow ( $ columnIndex , $ lineIndex )-> setValue ( $ columnValue );
}
$ lineIndex ++;
}
foreach ( $ columnsMap as $ columnMapId => $ columnTitle ) {
$ sheet -> getCellByColumnAndRow ( $ columnMapId + 1 , 1 )-> setValue ( $ columnTitle );
}
$ writer = $ this -> get ( ' phpoffice.spreadsheet ' )-> createWriter ( $ spreadsheet , ' Xlsx ' );
ob_start ();
$ writer -> save ( ' php://output ' );
$ excelOutput = ob_get_clean ();
return new Response (
$ excelOutput ,
200 ,
[
' content-type ' => ' text/x-csv; charset=windows-1251 ' ,
' Content-Disposition ' => ' attachment; filename="price.xlsx" '
]
);