Hoy en día Microsoft Excel es uno de los gestores de planillas de cálculo mas utilizados en todo el mundo, mas allá de que Google Docs sea muy simple, gratis y online, el Excel es uno de los pilares dentro de la suite de Microsoft. Es por eso que cuando creamos una aplicación buscando ser lo mas útil para el usuario debemos contemplar la opción de permitir exportar la información para ser visualizada en Excel, para eso les voy a recomendar una clase php para generar documentos xls realmente simple.
PHP Excel Creator library es una pequeña librería que nos provee de las clases php necesarias tanto para crear como para leer ficheros Excel desde PHP sin demasiadas complicaciones, yo la conocí hace unos días gracias a Juokaz y la verdad que desde que la vengo utilizando no tengo ninguna complicación, la implementación de esta clase es sencilla, a continuación coloco el mismo ejemplo que utilice yo cuando la utilice por primera vez.
[PHP]
require (‘..path/Writer.php’);
$filename = ‘myFile.xls’;
$workbook = new Spreadsheet_Excel_Writer();
$workbook->send($filename);
// Look at documentation
$workbook->setVersion(8);
// Temporary files directory
$workbook->setTempDir(‘/tmp’);
$worksheet =& $workbook->addWorksheet(‘Items’);
$worksheet->setInputEncoding(‘UTF-8’);
$worksheet->setMargins(0.25);
$worksheet->centerHorizontally(1);
$worksheet->activate();
$format_header =& $workbook->addFormat();
$format_header->setBold();
$format_header->setSize(12);
$worksheet->write(0, 0, ‘Code’,$format_header);
$worksheet->setColumn(0, 0, 30);
$worksheet->write(0, 1, ‘Title’,$format_header);
$worksheet->setColumn(1, 1, 50);
$format_row =& $workbook->addFormat();
$format_row->setSize(12);
foreach ($items as $item)
{
$worksheet->writeString($i, 0, $item->code, $format_row);
$worksheet->writeString($i, 1, $item->title, $format_row);
}
$workbook->close();
[/PHP]
Como verán la utilización de esta clase no tiene demasiada complejidad, además con solo un valor podemos definir la versión de Excel con la que queremos generar el archivo, y de paso nos olvidamos de toda la complejidad que tiene parsear un documento de Excel a “mano”.
Otra clase que había probado hace tiempo y me pareció muy buena también es phpexcel, pero la verdad para el uso que le doy yo las dos se comportan de forma muy similar, quizás para grandes requerimientos a fin de evitar un alto consumo de recursos la ultima clase que les comento sea un poco mejor, pero esto había que confirmarlo con algunos benchmarks.
Por el momento sigo muy contento con PHP Excel Creator library 😀
Rayban
16 años ago
gran articulo
Pablo
16 años ago
@Rayban: Me alegro que te guste 😀
VictorArias
16 años ago
Excelente este artículo he visto a muchos sufriendo por encontrar una solución de este tipo y más esta tan sencilla. Mil gracias 😀
shadow
16 años ago
Hi,
muy buen articulo, hace unos meses tuve que general archivos xls pero no encontre ninguna lib que lo hiciera de forma correcta (que funcionara por asi decirlo :P) asi que termine generando cvs 😛
Regards,
Shadow.
Pablo
16 años ago
@Victor: Si es complicado encontrar algo tan sencillo para generar archivos de excel, la verdad que esta bueno, gracias por el comentario!
@Shadow: Gracias, me alegro que te sirva 😀
danny
15 años ago
disculpa no me funciona! donde puedo encontrar ducumentacion gratis!, lo copie tal cual tu ejemplo y:
Fatal error: Call to undefined method: spreadsheet_excel_writer_worksheet->raiseerror() in C:\AppServ\www\Otro excel\excel-2.0\Worksheet.php on line 1518
y no quiero menterme con la libreria, no se para que sirbe el dir /temp de todos modos lo cree
Pablo
15 años ago
@danny: Que raro deberia funcionar, quizas este mal la ruta en la primer linea por lo que dices ahi require (‘..path/Writer.php’); fijate ubicarla correctamente sino puedes leer mas acerca de esta clase en http://pizzaseo.com/php-excel-creator-class espero haber podido ayudado un poco mas 🙂
Generar un PDF con PHP | Kabytes
15 años ago
[…] un tiempo me había emocionado jugando con una clase que permitía crear documentos de Excel desde PHP, en esta ocasión y gracias a Delicious descubro mPDF y como el titulo de la entrada dice y el […]
carlos
15 años ago
soy novato en php
perdona mi ignorancia, cuando hice lo de las librerias si creo el archivo, pero i problema es como implementarlo para leer un archivo?
agradezco tu respueta
Erick
15 años ago
Saludos !
Soy nuevo en PHP me gustaria saber si alguien tienen noción como debo empezar para crear un cotizador en linea, que por medio del area de un triangulo cotize el precio de un producto :S.
Alguien puede darme una idea o decirme sobre un recurso.
Gracias.
@Pablo gracias el articulo
Mostrar el contenido de un documento Excel con PHP | Kabytes
15 años ago
[…] hace bastante tiempo les había comentado una manera para leer y crear xls con php, ahora y gracias al repositorio de Google descubro una forma aún más simple de mostrar el […]
Kike
14 años ago
hola Pablo, disculpa quisiera hacerte una pregunta, con esto q nos muestras puedo partir de un archivo que tengo en excel para porder mandar los datos desde php?? y si es asi el excel se muestra en pantalla o tendria q abrirlo ??? me podrias explicar mas como se desarrolla, Gracias.
Eduardo
14 años ago
Funciona bajo PHP4 esta librería??
Saludos estimados. 🙂
Pablo
14 años ago
@Eduardo: Tendrías que probarlo, pero al menos en la documentación se pide PHP version 5.2.0 o superior así que probablemente alguna función no funcione correctamente!
Saludos!!
Eduardo
14 años ago
@Pablo: Correcto, tengo php4 en uno de los servidores de desarrollo de mi trabajo y no funciono, probaré con PHP5 entonces, igual necesitaba saber que versión de PHP necesitaba.
Saludos cordiales
jorge
14 años ago
ola me gustaria saber como mandarlo a una cierta ruta, xke al seleccionarlo me lo descarga automaticamente. gracias
Eduardo
14 años ago
@jorge solo debes configurar el navegador en preferencias, ya que la ruta donde guardar es exclusivamente responsabilidad del usuario gestor de la descarga.
Saludos
parentesys
14 años ago
prueba para ver si es que los comentarios son moderados o ha habido un error al enviar la respuesta: si es lo primero, no he visto ningún mensaje de aviso de moderación, y debería existir. saludos
Carolina
14 años ago
Hola muy buena la clase, pero quisiera saber si es posible crear un comentario en un titulo de excel con php.. y si esta clase lo permite.. De antemano muchas gracias.
Roxana
14 años ago
Hola mira lo que pasa es que he migrado de hosting en el anterior funcionaba correctamente pero ahora que lo migr no funciona me aparece que no existe el archivo en esa ruta pero si esta!!!
Eduardo
14 años ago
@Roxana, debes darle permisos a los archivos de escritura, cualquier duda vuelve a comentar.
Saludos.
Roxana
14 años ago
Como se dan los permisos de escritura?, porque tb uso librerias para exportar a pdf y funciona normal
Roxana
14 años ago
Pero ya le di y nada 🙁
Marlon Martinez
14 años ago
AQUI UNA SOLUCION PARA LEER UNA ARCHIVO XLS Y MOSTRARLO EN UNA PAGINA
load(«Cadena_Funcional.XLS»); //reemplazar por el nombre del archivo
/** Abriendo la hoja que contiene la informacion */
$objPHPExcel->setActiveSheetIndex(0);
echo »;
/** obteniendo el numero total de filas y columnas */
$rows=$objPHPExcel->getActiveSheet()->getHighestRow();
$cols=PHPExcel_Cell::columnIndexFromString($objPHPExcel->getActiveSheet()->getHighestColumn());
/** recorriendo la hoja */
for($i=1;$i<=$rows;$i++)
{ echo '’;
for ($j=0;$jgetActiveSheet()->getCellByColumnAndRow($j,$i)->getValue();
echo ».$val.»;
}
echo »;
}
echo »;
?>
Juan Tena
13 años ago
Esta Libreria te permite abrir un cvs y guardarlo como xls 97-2003 ? , porque es lo que yo necesitaria.
Gracias
Eduardo
13 años ago
Viene listo para XLS 97-03.
Saludos.
JUan Tena
13 años ago
Hola Eduardo, Gracias, ya lo he probado y va perfecto con algun pero, como la longitud de las celdas, el tema de los acentos etc. Pero en con un poquito de paciencia y controlando los casos que nos podemos encontrar al final se soluciona, si alguien esta interesado en el script que he hecho para convertir un cvs a excel que me lo indique y se lo mando con muchisimo gusto
Gracias a Todos y a ti en especial.
Un saludo
Juan Tena
Eduardo
13 años ago
Juan, exacto tiene algunos defectos, no errores, pero lo puedes mejorar continuamente, si encuentro estos fuentes los podría compartir ya que hace mucho tiempo hice esto y poco me acuerdo de su funcionamiento, lo unico que se, es que los deje en un sistema de gestión de horas hombre.
Saludos.
Milagros
13 años ago
Buenos dìas, copie el codigo tal cual pero me da el siguiente error: Warning: Invalid argument supplied for foreach() in C:\AppServ\www\Excel\pruebaExcel.php on line 33…. Necesito ayuda urgente.. Gracias
Eduardo
13 años ago
Puedes copiar el trozo de código antes y despues de la linea 33 del archivo.
Haber si te puedo ayudar, eso si te digo que AppServ es limitado, también puede ser por eso.
Saludos.
Milagros
13 años ago
Este es el codigo: send($filename);
// Look at documentation
$workbook->setVersion(8);
// Temporary files directory
$workbook->setTempDir(‘../tmp’);
$worksheet =& $workbook->addWorksheet(‘Items’);
$worksheet->setInputEncoding(‘UTF-8’);
$worksheet->setMargins(0.25);
$worksheet->centerHorizontally(1);
$worksheet->activate();
$format_header =& $workbook->addFormat();
$format_header->setBold();
$format_header->setSize(12);
$worksheet->write(0, 0, ‘Code’,$format_header);
$worksheet->setColumn(0, 0, 30);
$worksheet->write(0, 1, ‘Title’,$format_header);
$worksheet->setColumn(1, 1, 50);
$format_row =& $workbook->addFormat();
$format_row->setSize(12);
foreach ($items as $item)
{
$worksheet->writeString($i, 0, $item->code, $format_row);
$worksheet->writeString($i, 1, $item->title, $format_row);
}
$workbook->close();
?>
Gracias por tu respuesta, otra pregunta este codigo solo me genera un archivo excel con una sola hoja?
Eduardo
13 años ago
Creo que es por el AppServ, te comparto el mío es mucho mas ágil y preciso, sobre manejar hojas se puede, googlea un poco y puedes encontrar, particularmente no tengo ese código ya que donde lo hice ya no trabajo ahí. Este lo utilice con EasyPPH 5 o superior.
cualquier cosa rootaker@gmail.com estoy un poco ocupado ahora y ver mas en detalle tendría que ser mas tarde.
Saludos.
Milagros
13 años ago
Muchas gracias por tu respuesta…
jok3rcit0
13 años ago
Hola, antes que nada muy buen post es la misma librería que yo ocupe..
Aunque tengo una duda que no eh podido resolver espero me puedan ayudar,
Si yo en vez de querer que cuando me genere el excel me lo abra con excel lo haga con google docs? esto es posible?
goodkat
13 años ago
hola, estoy intentando leer un archivo cdb cambiandole la extension a xls, ya me funciono en algun momento pero ahora cambie de archivo y empezo a arrojar el siguiente mensaje The filename is not readable, alguna idea??? GRACIAS
Nao
13 años ago
Hola buen día estoy interesado en es script para convertir un csv a excel.
Manipular archivos de PowerPoint con PHP [lectura, escritura, edición] | Kabytes
12 años ago
[…] nadie puede negar que sea altamente flexible, por ejemplo podemos trabajar con archivos de Excel, PDF, sin ningún tipo de problemas, y como es de esperarse lo mismo ocurre con los archivos de […]
Mauro
12 años ago
Pablo: estoy intentado utilizar PHPExcel en YII Framework y funciona muy bien, pero el problema que tengo ahora es que necesito que el sistema automáticamente me descargue varios excels de acuerdo a los datos suministrados, lo coloco dentro de un foreach pero al necesitar descargarlo tengo que colocar las «headers» y me parece que ahi tengo el problema, porque me funciona bien con el primer items del foreach, luego me dice que no encuentra la accion. Tenes algún ejemplo al respecto? La idea es descargar a la PC del cliente varios items según seleccione. Lo manejo con el ID
tomy....
12 años ago
hola tengo una página y exporto los datos a excel para esto utilizaba el prado 3.1 donde me funcionaba muy bien el código he actualizado el código al prado 3.2.0 y ahí no me funciona la exportación de datos a mi archivo excel para eso utilizo el siguiente código … agradeceré mucho su ayuda …. cabe mencionar que al momento de darle la exportación solo me actualiza la página … muchas gracias
public function spreadsheet()
{
if(($this->Session[«resultado1»] != null or $this->Session[«resultado2»] != null)or($this->Session[«resultado1»] != null and $this->Session[«resultado2»] != null))
{
$x=array(array(‘ID’,’NO. JURIS’,’Clues’,’NOMBRE UNIDAD’,’TIPO’,’NOTIFICANTE’,’DIAGNOSTICO’,’FECHA NOTIFICACION’,’TIPO DE COMPLICACION CLINICA’,’INFORMACION EPIDEMIOLOGICA COMPLEMENTARIA’,’FECHA DE INICIO DE SINTOMAS’,’PACIENTE’));
$sheet1=array_merge($x,$this->Session[«resultado1»]);
if($this->Session[«resultado2»] != null)
{
$x2=array(array(‘ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘),array(‘No BROTE’,’NO. JURIS’,’CLUES’,’UNIDAD NOTIFICANTE’,’TIPO’,’DIAGNOSTICO’,’LUGAR DE OCURRENCIA’,’FECHA INICIO’,’FECHA FIN’,’CASOS PROBABLES’,’CASOS CONFIRMADOS’,’HOSPITALIZADOS’,’DEFUNCIONES’));
$sheet2=array_merge($x2,$this->Session[«resultado2″]);
$sheet1 = array_merge($sheet1,$sheet2);
}
$workbook = new Spreadsheet_Excel_Writer();
$format_und =& $workbook->addFormat();
$format_und->setBottom(2);//thick
$format_und->setBold();
$format_und->setColor(‘black’);
$format_und->setFontFamily(‘Arial’);
$format_und->setSize(8);
$format_reg =& $workbook->addFormat();
$format_reg->setColor(‘black’);
$format_reg->setFontFamily(‘Arial’);
$format_reg->setSize(8);
{
$rowcount = count($sheet1);
$colcount = 10;
$wbname=»»;
$worksheet =& $workbook->addWorksheet($wbname);
$worksheet->setColumn(0,0, 6.14);//setColumn(startcol,endcol,float)
$worksheet->setColumn(1,3,15.00);
$worksheet->setColumn(4,4, 8.00);
}
$i = 0;
$j = 0;
foreach($sheet1 as $fila)
{
if ($i==0)
$fmt =& $format_und;
foreach($fila as $campo)
{
$worksheet->write($i, $j, $campo, $fmt);
$j++;
}
$i++;
$j = 0;
$fmt =& $format_reg;
}
$workbook->send(‘reportes.xls’);
$workbook->close();
}
else
{
$this->ClientScript->registerBeginScript(«guardado»,»alert(‘No hay datos para exportar’)»);
}
header(‘Refresh:5’);
}