Crear y leer archivos Excel con PHP
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

gran articulo
@Rayban: Me alegro que te guste
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
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
) asi que termine generando cvs
Regards,
Shadow.
@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
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
@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
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
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
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.
Funciona bajo PHP4 esta librería??
Saludos estimados.
@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!!
@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
ola me gustaria saber como mandarlo a una cierta ruta, xke al seleccionarlo me lo descarga automaticamente. gracias
@jorge solo debes configurar el navegador en preferencias, ya que la ruta donde guardar es exclusivamente responsabilidad del usuario gestor de la descarga.
Saludos
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
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.
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!!!
@Roxana, debes darle permisos a los archivos de escritura, cualquier duda vuelve a comentar.
Saludos.
Como se dan los permisos de escritura?, porque tb uso librerias para exportar a pdf y funciona normal
Pero ya le di y nada
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 ”;
?>
Esta Libreria te permite abrir un cvs y guardarlo como xls 97-2003 ? , porque es lo que yo necesitaria.
Gracias
Viene listo para XLS 97-03.
Saludos.
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
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.
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
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.
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?
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.
Muchas gracias por tu respuesta…
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?
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