Hojas de cálculo excel con php

pear.pngDesde hace algun tiempo me veo obligado a generar estadísticas y de mas informes que en algunos casos es muy útil exportarlos a hojas de cálculo. Hasta ahora exportaba esos datos generando archivos csv que luego importaba desde Excel, OpenOffice.org Clac o cualquier otra Hoja de Cálculos, pero es bastante limitado puesto que no se pueden generar hojas separadas (al menos que yo sepa) en un mismo documento, ni se le puede dar formato a las celdas, además de lo incordioso que es tener que importar los datos con la hoja de cálculo.

La solución la he encontrado hoy, aunque ya es bastante antigua, un paquete de PEAR para generar hojas de cálculo excel en formato nativo y con muchas posibilidades. El paquete es Spreadsheet_Excel_Writer.

Es obvio que teneis que tener instalado PEAR, y una vez satisfecho este requisito, solo teneis que bajar el paquete y su única dependencia: el paquete OLE. Una vez descargados los paquetes solo debeis hacer:

pear install OLE-x.x.tgz
pear install Spreadsheet_Excel_Writer-x.x.x.tgz

A partir de aquí solo queda hacer el código php para generar las hojas de cálculo. Un ejemplo sencillo:

< ?
//incluimos la libreria
require_once 'Spreadsheet/Excel/Writer.php';

//damos nombre al documento
$filename="prueba.xls";

//abrimos un nuevo documento
$docexcel = new Spreadsheet_Excel_Writer();

//abrimos una hoja del documento
$nuevahoja =& $docexcel->addWorksheet(”Titulo de la Hoja”);

//escribimos en sus celdas
$fila=0;
$columna=0;
$valor=”Hola”;
$nuevahoja->write($fila, $columna, “$valor_de_la_celda”);

//enviamos el documento para descargarlo y lo cerramos
$docexcel->send($filename);
$docexcel->close();
?>

Como he dicho también se le puede dar formato a las celdas, podeis encontrar como hacerlo en la documentación.

Publicado el Thursday 06 de July de 2006 por chuano
Guardado en Documentos , Recetas
Compártelo Trackback

29 comentarios a “Hojas de cálculo excel con php” »»

  1. Comment de vaLar publicado el 25/10/06 a las 5:22
    Gravatar vaLar

    Es interesante el ejemplo que propones. Pero tengo una duda: Eiste el proceso inverso?

    Es decir.. tener una hoja de calculo en excel y portarla a un DBMS (como MySQL) a través de php?

  2. Comment de chuano publicado el 25/10/06 a las 9:02
    Gravatar chuano

    Hola vaLar, pues que yo sepa no se puede, lo unico que se me ocurre es que exportes el excel a csv y eso si puedes importarlo facilmente.

    Un saludo.

  3. Comment de Sebastián publicado el 15/01/07 a las 1:51
    Gravatar Sebastián

    No sé si te ha pasado a ti, pero tengo un problema con el encoding, y no sé cómo solucionarlo, en la base de datos estoy usando UTF-8, pero al generar el Excel, me muestra los típicos carácteres raros de un encoding que no entiendo, no sé, cómo lo solucionaste, pero si te tocó, me ayudaría mucho saber cómo lo hiciste.
    Saludos.

  4. Comment de chuano publicado el 15/01/07 a las 9:23
    Gravatar chuano

    Sebastian, nunca me ha ocurrido esto, porque suelo usar iso en la base de datos, pero puedes probar a decodificar las cadenas antes de meterlas en la hoja de calculo.

    Para ello puedes usar utf8_decode, así tendrás una cadena iso.

    Prueba a ver si te sirve.

    Un saludo!

  5. Comment de victor publicado el 07/02/07 a las 21:11
    Gravatar victor

    hola…
    estaba paseando por aca, y me di cuenta que les gustaria saber una solucion para el proceso inverso.
    bueno…
    visiten mi blog.
    http://blogvistor.blogspot.com

    tengo la solucion…
    queria decirles que con php todo es posible… jajajaj

    por otro lado, tengo yo un problema…
    necesito interrumpir un proceso con una condicion
    el problema es que estoy procesando masivamente datos, pero no puedo detenerlo, realizar otro proceso y despues continuar.
    alguna idea???
    porfa.

  6. Comment de chicota publicado el 08/05/07 a las 22:19
    Gravatar chicota

    Estoy apenas manejando php Spreadsheet_Excel_Writer y ya he realizado varios ejemplos con este, pero en tu ejemplo
    transcribi, y lo corri y me sale este error:
    Cannot modify header information - headers already sent by

    y casi en todos los ejemplos que he corrido me sale lo mismo
    es porque no tengo permisos para manejar este

    espero respuesta

  7. Comment de chuano publicado el 08/05/07 a las 22:36
    Gravatar chuano

    chicota, copia la linea de error entera, pero supongo que es porque pones que tenga salida de texto (algun echo) antes del envio del fichero y entonces no puede enviar el tipo mime en las cabeceras http.

    No se si me explico.

    Para enviar un fichero como en este caso, noo puede haber salida alguna de texto en el navegador.

    Un saludo!

  8. Comment de chicota publicado el 09/05/07 a las 19:45
    Gravatar chicota

    mira este es mi codigo
    send(’nuevo.xls’);

    $worksheet =& $workbook->addWorksheet();
    $worksheet->write(0, 0, “hola”);

    if (PEAR::isError($worksheet)) {
    die($woeksheet->getMessage());
    }

    $workbook->close();
    ?>

    y ya realiza la descarga pero en excel mnuestra esto:

    no se puede leer el archivo

    a que se debe?

  9. Comment de chuano publicado el 10/05/07 a las 16:29
    Gravatar chuano

    Supongo que el problema es que estás enviando el archivo antes de crearlo, el send debería estar al final.

    Debes crear el libro, y al final enviarlo, fijate en el código de ejemplo que hay arriba.

    Saludos!

  10. Comment de raul publicado el 27/05/07 a las 17:56
    Gravatar raul

    Como pasar una hoja de Excel a php.. una base de datos creada por mysql… q si me puede ser paso a paso q soy novato en esto.. Graciassss

  11. Comment de Raúl publicado el 27/11/07 a las 17:21
    Gravatar Raúl

    Hola,

    estoy que me subo por las paredes intento hacer lo que pones en el tutorial pero me sale el siguiente error cuando cargo la página:

    Warning: main(Spreadsheet/Excel/Writer.php) [function.main]: failed to open stream: No such file or directory in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\ComandesBEM_PHP\raul.php on line 4

    Fatal error: main() [function.require]: Failed opening required ‘Spreadsheet/Excel/Writer.php’ (include_path=’.;c:\php4\pear’) in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\ComandesBEM_PHP\raul.php on line 4

    Qué me estoy olvidando ?

    Gracias.

  12. Comment de chuano publicado el 27/11/07 a las 18:17
    Gravatar chuano

    Al parecer no tienes instalada la extensión pear “Spreadsheet_Excel_Writer”.

    Debes asegurarte de tener instalado PEAR y dicha extensión.

    En la página de PEAR encontrarás más información de como instalarlo :)

  13. Comment de Javier publicado el 21/12/07 a las 15:00
    Gravatar Javier

    Hola, yo necesitaria agregarle las lineas de los recuadros a los campos de mi xls y tambien el ancho de columna, se puede hacer esto?

    Gracias

  14. Comment de chuano publicado el 21/12/07 a las 18:32
    Gravatar chuano

    Sí, se puede, mira la documentación , por ejemplo setBorder o setBorderColor :)

  15. Comment de irina publicado el 01/02/08 a las 19:22
    Gravatar irina

    bueno, mi amigo Edwin y yo instalamos pear de un manual que es bien contito tiene los siguientes pasos:
    esta es la dirección del manual:
    http://www.noth.es/2006/12/13/instalacion-de-pear-manualmente-en-windows/

    los pasos eran los siguientes:
    -Nos bajamos el fichero pear,
    -descomprimimos el fichero PEAR 1.4.11 y dos ficheros xml, entramos en la carpeta PEAR-1.2.1.1 y copiamos todo su contenido.
    -pegamos el conteniod dentro de la carpeta de instalación de php y a su vez dentro de la carpeta PEAR
    ojo con esto por que es en ambas carpetas
    -y configurar el php.ini
    aveces manda el error porque no encuentra la ruta donde esta pear a pesar de que este instalado.

    Entonces modificamos elphp.ini
    include_path = “.;c\appServer\PHP\PEAR”
    y luego reiniciar el servidor— EN NUESTRO CASO ERA IIS.

    LUEGO BUSCAMOS LA CARPETA DENTRO DE PEAR (Speadsheet)y OLE
    dentro de Speadsheet esta la carpeta excel y dentro de la carpeta excel estan los archivos Writer.php y una carpeta que se llama Writer que tiene los siguientes archivos que son necesarios BIFwriter, Parser, Workbook, Worksheet, Validator, format….

    Mira que te digo esto porque nosotros instalamos el que esta en la página de Pear pero faltaba la carpeta OLE, ya que cuando lo tienes instalado sino no encuentra un archivo te lo nombra—

    bueno tenemos instalado el servidor en IIS y php es versión 4
    y luego instalamos el paquete de excel y todo perfecto gracias a Dios.

  16. Comment de irina publicado el 01/02/08 a las 19:29
    Gravatar irina

    esta instalación del pear que te mencione es solamente copiar las carpetas en el lugar correcto. luego prueba tu php que tiene usa la librería y te das de cuenta si corre. Si te manda un error de ruta, o te nombra una carpeta distinta de SpreadSheet entonces busca la carpeta.
    Yo tengo xammp en mi máquina y en este paquete el pear viene instalado así que todos los php. que generan el excel me corrían. Pero cuando fui a montar las páginas en el Servidor no sucedia nada así que tuve que copiar las carpetas tal y como menciona el tutorial y luego copiar el paquete de excel…los archivos que me faltaban los copiaba del paquete de xammp.

    Espero te ayude…!!

  17. Comment de irina publicado el 01/02/08 a las 19:34
    Gravatar irina

    Para pasar una hoja de excel a Mysql te recomiendo leer esta página (exportar excel a Mysql usando php)
    Seguramente, os habéis preguntado como poder pasar los datos de una hoja de Excel a una Base de Datos
    Mysql, por ejemplo, para que la gente pueda ver los artículos que hay en mi almacén.
    1.-El primer paso es crear la tabla.
    CREATE TABLE almacen
    (
    articulo CHAR(80),
    color CHAR(20) ,
    material CHAR(60),
    precio INTEGER
    );
    2.- El segundo paso es convertir el fichero de excel en un fichero con formato (.CSV).

    Esto consiste en generar un fichero, donde los datos de cada fila van separados por coma.

    //Esto es muy importante.
    Para guardarlo se debe seleccionar “Guardar como” y elegir el Tipo (CSV “Delimitado por comas”).
    Le damos el nombre “datos.csv”.

    El fichero generado quedaría algo así:

    Camiseta,Blanca,Algodón,1500
    Pantalón,Azul,Algodón,5000
    Jersey,Negro,Algodón,3500
    Malla,Azul,Algodón,3000
    Top,Blanco,Algodón,3400
    Correa,Negra,Cuero,3400
    Gorra,Colores,Algodón,1400
    Calcetines,Blancos,Algodón,500
    3.-El tercer paso es leer el fichero “datos.scv” y meterlo el la tabla “Almacen” de la Base de

    <?php
    require(”config.php”); //esta es la conexión con la base de datos resumido en un archivo config.php

    $row = 1;
    $fp = fopen (”prueba.csv”,”r”);
    while ($data = fgetcsv ($fp, 1000, “;”))
    {
    $num = count ($data);
    print ” “;
    $row++;
    echo “$row.”. $data[0].” ———— “.$data[1].” ———— “.$data[2].$data[3];
    $insertar=”INSERT INTO sorteo_inaugural (numero,nombre,mail,ci,date,time) VALUES (’$data[0]‘,’$data[1]‘,’data[2]‘,’data[3]‘,’data[4]‘,’data[5]‘)”;
    mysql_query($insertar);
    }
    fclose ($fp);
    ?>

    Si le das te aseguro que funcion….! Bendición de Jesús.

  18. Comment de irina publicado el 01/02/08 a las 19:35
    Gravatar irina

    Bueno en realidad si tu pones en el buscador esta información “exportar excel a Mysql usando php ” te saldrá la página que te estoy mencionando

  19. Comment de chuano publicado el 02/02/08 a las 2:14
    Gravatar chuano

    Irina, el método de instalación que propones me resulta un poco complejo y lioso, no sé si es necesario de ese modo en Windows.

    En este post hablo de su instalación en linux, tan sencillo como ejecutar en linea de comandos “pear install paquete”, pero no se si eso es posible en Windows, quizá solo se pueda instalar como propones.

    El proceso de exportar de excel a mysql es bastante sencillo, como comentas, simplemente exportar a csv, aunque no concía la función fgetcsv y yo tomo la línea con fgets y la divido en los campos con split. Un par de pasos más pero mismo espíritu :)

  20. Comment de Ariochy publicado el 19/02/08 a las 22:13
    Gravatar Ariochy

    me gustaria que explicaras donde pongo el paquete descargado. Y si tengo que hacer alguna configuración.

    Gracias.

  21. Comment de chuano publicado el 20/02/08 a las 9:55
    Gravatar chuano

    Ariochy, tendrás que instalar PEAR en tu máquina, esto depende entre Linux y Windows, en caso de Linux puedes instalarlo con tu gestor de paquetes favorito (Ejemplo: aptitude install php-pear), en caso de Windows, deberás instalarlo de otro modo que no conozco porque no lo uso, pero parece que aquí lo explican.

    Después en linea de comandos sigue los pasos especificados en el post. No hace falta descargar manualmente nada.

    pear install OLE-x.x.tgz
    pear install Spreadsheet_Excel_Writer-x.x.x.tgz
    

    Puedes ver todos los paquetes pear disponibles con el comando pear list.

  22. Gravatar Luis Chacón Rovira

    Buenas buenas… existe una posibilidad de leer archivos nativos de excel.

    pueden ir al link.. http://sourceforge.net/projects/phpexcelreader/

    y ahi aparece todo.

    Saludos!

  23. Comment de Roberto publicado el 03/03/08 a las 12:48
    Gravatar Roberto

    Buenas. Tengo un problema, he creado una aplicación que crear archivos excel dinámicamente y abre la ventana de descarga de dicho archivo.

    En Windows me funciona perfectamente pero en el servidor que tengo que instalarlo que utiliza el sistema operativo linux, cuando le doy para crear el archivo no me aparece nada, ni ningún error ni la pantalla de descarga.

  24. Comment de Victor publicado el 25/03/08 a las 17:06
    Gravatar Victor

    Bueno y como se cuando ya teng instalados los paquetes de Excel Reader y Excel writer ???

    todo lo he kerido instalar desde la consola de windows pero cuando cuando introduzco el comando

    pear install -f phpExcel Reader

    ó

    pear install -f Spreadsheet_excel_writer-0.9.1.tgz ( tambien la he descomprimido la carpeta, igual ya lo intente sin -f )

    y no lo instala siempre me marca un error q dice:

    Notice:userialize:error at offset 55 of 378 bytes in config.php on line 1003
    ERROR: The default config file is not valid cofig file or is corrupted.

    alguien sabe por q sale este error =?????

  25. Comment de Luis publicado el 14/05/08 a las 15:18
    Gravatar Luis

    Tengo ejemplos de codigos para leer y escribir archivos excel, en el medio le pueden meter el codigo que quieran como leer desde una base de datos y generar el archivo a exportar o ir leyendo desde un excel y a su vez ir cargando en una base de datos… lo que uds deseen si lo necesitan.
    Solo pidanlo y se los mando por correo.
    Necesitan tener spreadsheet reader y write con la dependencia ole correspondiente.
    Si tienen dudas de instalacion de los paquetes, formateo de celdas, etc… consulten sin dudas… le dejo un saludo

  26. Comment de JoelCristobal publicado el 28/05/08 a las 3:37
    Gravatar JoelCristobal

    Saludos si la tienes el codigo empieza escupirlo lo necesitamos
    Atte:
    ———————–
    Diseño Web
    http://www.onlysystem.com

  27. Comment de JoelCristobal publicado el 28/05/08 a las 3:38
    Gravatar JoelCristobal

    Saludos si la tienes el codigo empieza escupirlo lo necesitamos
    Atte:
    ———————–
    Diseño Web
    http://www.onlysystem.com

  28. Comment de JoelCristobal publicado el 28/05/08 a las 3:41
    Gravatar JoelCristobal

    Mejor te las doy aqui esta bien Completo todo
    <?php

    include(“include/cnn.php”);
    header(“Content-type: application/vnd.ms-excel”);
    header(“Content-Disposition: filename=\”excel.xls\”;”);

    $sql=“SELECT * FROM excel”;
    $res=mysql_query($sql);

    $columnas = mysql_num_fields($res);

    echo “”;
    echo “”;

    for($i=0; $i<$columnas; $i++){
    echo “”.mysql_field_name($res,$i).“”;
    }

    echo “”;

    while($datos = mysql_fetch_assoc($res)){
    echo “”;
    for($j=0; $j<$columnas; $j++){
    echo “”.$datos[mysql_field_name($res,$j)].“”;
    }
    echo “”;
    }

    echo “”;

    ?>

    Diseño Web
    Diseño Web

  29. Comment de yessury publicado el 17/06/08 a las 23:21
    Gravatar yessury

    esta porq no me ayudo para nada osea amix

Deja un Comentario

[x] Cerrar
E-mail
Subir