Usare PHPExcel con CodeIgniter
PHPExcel è un'ottima libreria per creare file excel con PHP.
Ne ho già parlato in passato, ed ora useremo questa libreria dentro al framework CodeIgniter.
Prima di tutto scaricate la libreria da qua.
Dentro al file zip identificate la cartella Classes; il suo contenuto mettetelo dentro application/third_party.
A questo punto create un file nominato excel.php dentro a application/libraries:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');require_once APPPATH . '/third_party/PHPExcel.php';
class Excel extends PHPExcel {
public function __construct() {
parent::__construct();
}}
Questo sarà il file che noi richiameremo nel controller, e altro non fa che richiamare la classe PHPExcel.
A questo punto procediamo nella creazione del model che eseguirà la query su db, e che richiameremo nel controller; ad esempio:
<?php
class Excel_model extends CI_Model {
public function getEntrate() {
$this->db->select('entrata_valore, causale_nome, conto_nome, entrata_data, entrata_note');
$this->db->from('entrate');
$this->db->join('causali', 'entrate.causale_id = causali.causale_id');
$this->db->join('conti', 'entrate.conto_id = conti.conto_id');
$this->db->order_by('entrata_data', 'desc');
$this->db->limit(50);
$query = $this->db->get();
return $query->result();
}}
Se non volete prendere tutte le colonne della tabella, dovete specificare quali volete, altrimenti ve le ritroverete tutte nel file excel.
A questo punto passiamo al controller:
<?php
class CreateExcel extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('excel');
$this->load->model('excel_model');
}public function index() {
$this->excel->getProperties()->setCreator('Matteo');
$this->excel->getProperties()->setLastModifiedBy('Matteo');
$this->excel->getProperties()->setTitle('Entrate');
$this->excel->getProperties()->setSubject('Entrate');
$this->excel->getProperties()->setDescription('Entrate Matteo');
$this->excel->getActiveSheet()->SetCellValue('A1', 'Valore');
$this->excel->getActiveSheet()->SetCellValue('B1', 'Causale');
$this->excel->getActiveSheet()->SetCellValue('C1', 'Conto');
$this->excel->getActiveSheet()->SetCellValue('D1', 'Data');
$this->excel->getActiveSheet()->SetCellValue('F1', 'Note');
$row = 2;
$col = 0;
$this->excel->setActiveSheetIndex(0);
foreach ($this->excel_model->getEntrate() as $data) {
foreach ($data as $key => $value) {
$this->excel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value);
$col++;
}
$row++;
$col = 0;
}
$this->excel->getActiveSheet()->setTitle('Book');
$filename = 'entrate.xls';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
$objWriter->save('php://output');
redirect($_SERVER['HTTP_REFERER'], 'refresh');
}}
Nel costruttore richiamiamo la nostra libreria e il model.
Poi settiamo vari attributi e i valori delle 5 celle della prima riga; queste celle corrispondono a quelle selezionate nella query.
Con la variabile $row diciamo alla query di riempire il file dalla seconda riga, in quanto nella prima ci sono le 5 celle che fungono da intestazione (ovviamente tutto ciò non è obbligatorio).
Nel ciclo foreach richiamiamo la funzione del model, esguiamo la query, cicliamo sui risultati e riempieamo il file.
Infine inviamo un header per salvare il file sul pc locale; qua ho impostato l'header per un file excel con formato XLS, ma volendo potete impostarlo anche per i file XLSX.
Non rimane altro che richiamare questo controller da qualche parte, ad esempio con un banale link:
<?php echo anchor('createexcel', 'Download Entrate'); ?>
Ciao!!
php codeigniter phpexcel excel xls xlsx
2 Commenti
Come non detto ;-) Ho trovato l'errore Tks
22/04/2013Salve innanzitutto tks per il tutorial..<br />ma ho un problema mi da sempre il seguente errore:<br /><br />Fatal error: Cannot redeclare class Excel in /var/www/domain.ext/trunk/code/application/libraries/excel.php on line 7
22/04/2013