Urielmania
“El Mundo de Uriel… Pero la voz de todos”
“El Mundo de Uriel… Pero la voz de todos”
Cuando trabajamos con tablas Mysql una de las cosas que necesitamos aparte de lo obvio, mostrar los resultados, es la de tener una manera facil de descargar los datos de las mismas, si bien lo comun es descargar un csv o dejar encabezados en la tabla pura para la descarga en formato xls, lo cierto es que para el cliente final esto aveces no es bonito o mejor dicho no es transparente, por tal motivo hay que explorar otras maneras y una de las que mas me gusto fue con la libreria PHPExcel.
PHPExcel es un conjunto de clases PHP/Biblioteca para leer y escribir archivos de Excel (.xls / .xlsx) muy eficiente y facil de usar, pero para usarla dentro de CodeIgniter se necesitan algunas modificaciones en el código fuente para que esta pueda ser ejecutada.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /* * ======================================= * Author : Muhammad Surya Ikhsanudin * License : Protected * Email : [email protected] * * Dilarang merubah, mengganti dan mendistribusikan * ulang tanpa sepengetahuan Author * ======================================= */ require_once APPPATH."/third_party/PHPExcel.php"; class Excel extends PHPExcel { public function __construct() { parent::__construct(); } }
Para poder hacer la exportacion de los datos de la tabla puedes basarte en el siguiente controlador:
class
Table_export
extends
Controller {
function
__construct()
{
parent::Controller();
// Here you should add some sort of user validation
// to prevent strangers from pulling your table data
}
function
index(
$table_name
)
{
$query
=
$this
->db->get(
$table_name
);
if
(!
$query
)
return
false;
// Starting the PHPExcel library
$this
->load->library(
'PHPExcel'
);
$objPHPExcel
=
new
PHPExcel();
$objPHPExcel
->getProperties()->setTitle(
"export"
)->setDescription(
"none"
);
$objPHPExcel
->setActiveSheetIndex(0);
// Field names in the first row
$fields
=
$query
->list_fields();
$col
= 0;
foreach
(
$fields
as
$field
)
{
$objPHPExcel
->getActiveSheet()->setCellValueByColumnAndRow(
$col
, 1,
$field
);
$col
++;
}
// Fetching the table data
$row
= 2;
foreach
(
$query
->result()
as
$data
)
{
$col
= 0;
foreach
(
$fields
as
$field
)
{
$objPHPExcel
->getActiveSheet()->setCellValueByColumnAndRow(
$col
,
$row
,
$data
->
$field
);
$col
++;
}
$row
++;
}
$objPHPExcel
->setActiveSheetIndex(0);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel
,
'Excel5'
);
// Sending headers to force the user to download the file
header(
'Content-Type: application/vnd.ms-excel'
);
header(
'Content-Disposition: attachment;filename="Products_'
.
date
(
'dMy'
).
'.xls"'
);
header(
'Cache-Control: max-age=0'
);
$objWriter
->save(
'php://output'
);
}
}