====== 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;