====== Creare fogli di calcolo con PHPExcel ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//03/05/2016 - 16:14//** \\ \\ [[https://github.com/PHPOffice/PHPExcel|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. ===== Hello world ===== Questo esempio crea un semplice foglio per Excel2007: **mytest0.php** 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'); ?> ===== Creare un foglio per Libre/OpenOffice ===== Questo esempio invece crea un foglio nel formato Ods contenente anche una formula per una semplice somma: **mytest1.php** 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; ===== Formattare l'aspetto delle celle ===== L'esempio che segue, prendendo spunto dal precedente, formatta graficamente l'aspetto di alcune celle del foglio. Stranamente la formattazione del testo sembra non funzionare con OpenDocument **mytest2.php** 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;