phpspreadsheet bundle
Release 1.1.0
該捆綁包將您的 Symfony 4/5/6/7 應用程式與 PHPOffice PhpSpreadsheet 生產力庫整合。
除了每個 PHPOffice 庫的先決條件之外,該捆綁包還需要:
* PHP 7.2 or higher
* Symfony 4 or higher
注意:由於 PHP <= 7.1 和 Symfony <= 4.4 的棄用狀態,不再支援 v1.0.0 之前的標籤(例如 v0.2.0)。
使用composer來要求最新的穩定版本。
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
$類型)傳回給定$type
的PhpOfficePhpSpreadsheetReader
類別的實例。
類型區分大小寫。支援的類型有:
Xlsx
2007.xlsxXls
:Excel 5/BIFF (95)Xml
:Excel 2003 XMLSlk
:符號連結(SYLK)Ods
:開放/自由辦公室(ODS)Csv
:CSVHtml
:HTML $ readerXlsx = $ this -> get ( ' phpoffice.spreadsheet ' )-> createReader ( ' Xlsx ' );
$ spreadsheet = $ readerXlsx -> load ( ' /path/to/file.xlsx ' );
Spreadsheet
$電子表格, string
$類型)給定一個PhpOfficePhpSpreadsheetSpreadsheet
物件和一個 writer $type
,傳回該類型的PhpOfficePhpSpreadsheetWriter
類別的實例。
除了上面的讀取類型之外,如果安裝了適當的 PHP 庫,還支援寫入這些類型。
Tcpdf
Mpdf
Dompdf
$ 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" '
]
);