Autore: Fabio Di Matteo
Ultima revisione: 03/05/2016 - 16:14
PHPExcel è una libreria in puro Php per la generazione di fogli di calcolo nei formati xls, ods,csv,pdf (etc…) E' disponibile sotto la licenza LGPL.
Questo esempio crea un semplice foglio per Excel2007:
mytest0.php
<?php require_once dirname(__FILE__) . '/PHPExcel/Classes/PHPExcel.php'; $spreadsheet = new PHPExcel(); $spreadsheet->setActiveSheetIndex(0); $worksheet = $spreadsheet->getActiveSheet(); $worksheet->SetCellValueByColumnAndRow(0, 1, 'Colonna 1'); $worksheet->SetCellValueByColumnAndRow(1, 1, 'Colonna 2'); $worksheet->SetCellValueByColumnAndRow(2, 1, 'Colonna 3'); $writer = new PHPExcel_Writer_Excel2007($spreadsheet); $writer->save('hello-world.xls'); ?>
Questo esempio invece crea un foglio nel formato Ods contenente anche una formula per una semplice somma:
mytest1.php
<?php require_once dirname(__FILE__) . '/PHPExcel/Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel(); // Proprieta' documento $objPHPExcel->getProperties()->setCreator("Fabio Di Matteo") ->setLastModifiedBy("Fabio Di Matteo") ->setTitle("Prova PHPExcel con file ods") ->setSubject("Open Document test") ->setDescription("Prova di PHPExcel con opendocument") ->setKeywords("office ods open document php") ->setCategory("Test result file"); // Aggiungiamo qualche colonna $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'Colonna 1') ->setCellValue('B1', 'Colonna 2') ->setCellValue('C1', 'Colonna 3') ->setCellValue('D1', 'Colonna 4') ->setCellValue('E1', 'Totale'); //Inserisco dati numerici per fare una semplice addizione $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A2', '3'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B2', '3'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E2', '=SUM(A2:D2)'); // Rinomino il foglio $objPHPExcel->getActiveSheet()->setTitle('Mio foglio Uno'); // Setta il foglio attivo $objPHPExcel->setActiveSheetIndex(0); // Ridireziona l'output per (OpenDocument) header('Content-Type: application/vnd.oasis.opendocument.spreadsheet'); header('Content-Disposition: attachment;filename="simple.ods"'); header('Cache-Control: max-age=0'); // Per IE 9 potrebbe essere necessaria la seguente riga: header('Cache-Control: max-age=1'); // Per IE 9 su SSL potrebbe essere necessario il seguente codice header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'OpenDocument'); $objWriter->save('php://output'); exit;
L'esempio che segue, prendendo spunto dal precedente, formatta graficamente l'aspetto di alcune celle del foglio.
mytest2.php
<?php require_once dirname(__FILE__) . '/PHPExcel/Classes/PHPExcel.php'; //Stranamente la formattazione del testo sembra non funzionare con OpenDocument $objPHPExcel = new PHPExcel(); // Proprieta' documento $objPHPExcel->getProperties()->setCreator("Fabio Di Matteo") ->setLastModifiedBy("Fabio Di Matteo") ->setTitle("Prova PHPExcel con file ods") ->setSubject("Open Document test") ->setDescription("Prova di PHPExcel con opendocument") ->setKeywords("office ods open document php") ->setCategory("Test result file"); // Aggiungiamo qualche colonna $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'Colonna 1') ->setCellValue('B1', 'Colonna 2') ->setCellValue('C1', 'Colonna 3') ->setCellValue('D1', 'Colonna 4') ->setCellValue('E1', 'Totale'); //---Proviamo la formattazione grafica del testo //Creo gli stili $styleRossoGrande = array( 'font' => array( 'bold' => true, 'color' => array('rgb' => 'FF0000'), 'size' => 13, 'name' => 'Verdana' )); $styleBold = array( 'font' => array( 'bold' => true, 'size' => 14, 'name' => 'Verdana' )); //Applico gli stili $objPHPExcel->getActiveSheet()->getStyle('E2')->applyFromArray($styleRossoGrande); $objPHPExcel->getActiveSheet()->getStyle('A1:E1')->applyFromArray($styleBold ); //Larghezza automatica foreach(range('A','E') as $columnID) { $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true); } //---fine formattazione testo //Inserisco dati numerici per fare una semplice addizione $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A2', '3'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B2', '3'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E2', '=SUM(A2:D2)'); // Rinomino il foglio $objPHPExcel->getActiveSheet()->setTitle('Mio foglio Uno'); // Setta il foglio attivo $objPHPExcel->setActiveSheetIndex(0); // Ridireziona l'output per (OpenDocument) header('Content-Type: application/vnd.oasis.opendocument.spreadsheet'); header('Content-Disposition: attachment;filename="simple.xls"'); header('Cache-Control: max-age=0'); // Per IE 9 potrebbe essere necessaria la seguente riga: header('Cache-Control: max-age=1'); // Per IE 9 su SSL potrebbe essere necessario il seguente codice header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'OpenDocument'); $objWriter->save('php://output'); exit;