Indice

Creare fogli di calcolo con PHPExcel

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.

Hello world

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');
 
?>

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

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

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

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