Este pacote integra seu aplicativo Symfony 4/5/6/7 com a biblioteca de produtividade PHPOffice PhpSpreadsheet.
Este pacote requer, além dos pré-requisitos de cada biblioteca PHPOffice:
* PHP 7.2 or higher
* Symfony 4 or higher
Nota: Tags anteriores à v1.0.0 (por exemplo, v0.2.0) não são mais suportadas devido ao status obsoleto para PHP <= 7.1 e Symfony <= 4.4.
Use o compositor para exigir a versão estável mais recente.
composer require yectep/phpspreadsheet-bundle
Se você não estiver usando Flex, habilite o pacote em seu arquivo AppKernel.php
ou bundles.php
.
$ bundles = array (
[...]
new Yectep PhpSpreadsheetBundle PhpSpreadsheetBundle (),
);
Este pacote habilita o serviço phpoffice.spreadsheet
.
Veja também a documentação oficial do PHPOffice PhpSpreadsheet.
Cria um objeto PhpOfficePhpSpreadsheetSpreadsheet
vazio ou, se um $filename
opcional for passado, instancia o PhpOfficePhpSpreadsheetIOFactory
para detectar e usar automaticamente a classe IWriter
apropriada para ler o arquivo.
// In your controller
$ newSpreadsheet = $ this -> get ( ' phpoffice.spreadsheet ' )-> createSpreadsheet ();
$ existingXlsx = $ this -> get ( ' phpoffice.spreadsheet ' )-> createSpreadsheet ( ' /path/to/file.xlsx ' );
string
$tipo) Retorna uma instância da classe PhpOfficePhpSpreadsheetReader
do $type
fornecido.
Os tipos diferenciam maiúsculas de minúsculas. Os tipos suportados são:
Xlsx
: Excel 2007Xls
: Excel 5/BIFF (95)Xml
: XML do Excel 2003Slk
: Link Simbólico (SYLK)Ods
: Open/Libre Office (ODS)Csv
: CSVHtml
:HTML $ readerXlsx = $ this -> get ( ' phpoffice.spreadsheet ' )-> createReader ( ' Xlsx ' );
$ spreadsheet = $ readerXlsx -> load ( ' /path/to/file.xlsx ' );
Spreadsheet
$planilha, string
$tipo) Dado um objeto PhpOfficePhpSpreadsheetSpreadsheet
e um escritor $type
, retorna uma instância de uma classe PhpOfficePhpSpreadsheetWriter
para esse tipo.
Além dos tipos de leitura acima, esses tipos também são suportados para gravação, se as bibliotecas PHP apropriadas estiverem instaladas.
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 ' );
Contribuições são mais que bem-vindas. Bifurque o projeto e envie um PR quando terminar.
Todos restantes incluem:
Se você estiver migrando do componente Symfony Serializer + codificador CSV - você pode usar código como
$ 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" '
]
);