Como escribir Hojas de Excel desde PHP.

Written on 11:01 a.m. by Jeiff


Para este pequeño HOW-TO se utiliza la librería Spreadsheet Excel Writer
del framework PEAR para php.
Esta librería nos permite crear hojas de Excel de forma rápida y sencilla,
con la ventaja de no tener que necesitar los objetos COM, es decir puede
funcionar desde LINUX :), soporta, formulas, imágenes y una gran cantidad
de formatos para celdas y texto.

Spreadsheet Excel Writer puede ser instalado con el siguiente comando:

$ pear install OLE;  Dependencia necesaria para SpreadSheet
$ pear install Spreadsheet_Excel_Writer;

O bien puedes descargarlo desde la siguiente dirección:
http://pear.php.net/package/Spreadsheet_Excel_Writer/download
Ahora vamos a generar una Hoja de Prueba:

<?
require_once 'Spreadsheet/Excel/Writer.php';

// Creamos un libro de excel que sirve como nuestro espacio de trabajo.
$libro = new Spreadsheet_Excel_Writer();

// Estableceremos nuestro formato Negrita para usarlo en el documento
$negrita =& $libro->addFormat();
$negrita->setBold();

// Necesitamos una hoja en la cual poner nuestros datos
$hoja =& $libro->addWorksheet(‘Hoja1’);

// Verificamos que la hoja se haya generado correctamente
if (PEAR::isError($hoja)) {
die($hoja->getMessage());
}

// Este es el titulo
$hoja->write(0, 0, "Escribir hojas en excel", $negrita);

// Generamos nuestro libro de excel
$libro->send('ejemplo.xls');
$libro->close();
?>


Este ejemplo nos generara un libro de excel con una hoja llamada Hoja1 la cual contendrá en su
Celda (A1) la palabra

“Escribir hojas en excel”.
Las funciones que nos interesan en este script son:

Spreadsheet_Excel_Writer(): No permite crear nuestro espacio de trabajo, en el que podremos
generar cuantas hojas queramos.

Es el constructor de la clase Spreadsheet_Excel_Writer y puede recibir como parámetro el
nombre del archivo de salida.


addFormat(): Nos permite añadir al libro distintos formatos para poder ser usados en nuestras
hojas. Como parámetro puede
recibir una array con las propiedades de nuestro formato.
Este objeto además tiene una serie de funciones para establecer
distintos formatos P/E: setBol(),
setAlign(), etc.


addWorksheet(): Nos permite agregar a nuestro libre una hoja de trabajo en la cual colocaremos
nuestros datos. Como parámetro
puede recibir el nombre de nuestra hoja, el cual no puede ser
mayor a 31 caracteres.


write(): Esta funcion nos permite escribir información en nuestra hoja, recibe como parámetros:
- Número de fila: un número entero.
- Número de Columna: un número entero.
- Información a escribir
- Formato de la celda, proveniente del objeto Format.

send(): Esta funcion es necesaria para preparar las cabeceras HTTP para mandar un archivo Excel. Recibe como parámetro el
nombre del archivo a usar en las cabeceras HTTP.

Además de estas funciones podría interesarnos la función:

writeFormula: Esta funcion nos permite escribir formulas en nuestra hoja, recibe como parámetros:
- Número de fila: un número entero.
- Número de Columna: un número entero.
- Cadena de la Formula.
- Formato de la celda, proveniente del objeto Format.
Un ejemplo de esta:
$hoja->writeFormula(0, 4, "=SUM(A1,C1)");

Con esto termino este mini HOW-TO, pueden encontrar más información acerca de SpreadSheet en:
http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.php

Espero que les haya sido de utilidad este artículo.

If you enjoyed this post Subscribe to our feed

15 Comments

  1. neXus |

    Hola Jeiff

    Tu artículo esta muy bueno. Te propongo publicar tu artículo en DevelopArts.com, solo te pedirpia que te registres para darte permisos de publicación... o en caso de que no te interese, me das permiso de agregar un link a tu artículo desde el mio?

    Saludos

     
  2. Carlos Enriquez Avila |

    hola me parecio muy interesante tu publicacion, te felicito. Pero no se si me podrias ayudar a generar varias hojas ya q mis reportes q deseo exportar desde php son muy grandes mas de 200000 lineas y muchos campos a mostrar. como hago para mostrarlo en varias hojas y como es el formato del archivopara pasarlo en el constructor si los campos estan separador por algun limitador ...no comprendi eso ok gracias. y te felicito.

     
  3. Anónimo |

    Buenas,

    Tu artículo esta muy bueno. Pero tengo una dificultad. ¿Cómo puedo conbinar celdas?

    Necesito formatear algunas celdas para un informe, pero no encuentro en ningun lugar como hacerlo.

    He intentado el "merge", pero no es lo que quiero.

    Ojala puedas ayudarme, gracias.

     
  4. Zizou |

    para combinar celdas recomiendo 1ero escribir el contenido de la celda y luego combinarla, seria algo asi

    $hoja->write(1,2,"Hola",$formato);
    $hoja->mergeCells(1,2,1,10);

     
  5. Anónimo |

    Ufff de la que me has salvado con la combinación de celdas. Habia intentado por todos los medios pero el merge simple no me servia.

    Gracias!!!

     
  6. Unknown |

    como le podre hacer para escribir en un formato ya establecido }??

     
  7. José Salas G |

    Hola Jeiff,

    Tu artículo esta muy bueno,

    tengo un pequeño problema que no he podido resolver, estoy desplegando en celdas valores con más de 255 caracteres y para eso uso

    $hoja->setversion(8);

    el problema es que cuando uso esa intrucción las columnas que tengo formateadas con la instruccion setTextRotation se muere la rotación.

    ¿conocen alguna forma de realizar esto sin que se muera el formato de las columnas con orientacion?

     
  8. javirol |

    Esta clase está muy bien, yo he trabajado con ella pero hay un problema con el que me he topado que no resuelvo. Se trata de modificar un excel.

    Con spreadsheet puedes arbir con permiso o de lectura $workbook = new Spreadsheet_Excel_Reader(); o bien permiso de escritura $workbook = new Spreadsheet_Excel_Writer();

    Lo que yo quiero de algun manera es combinar las 2 clases. Algo leí de por internet sobre un usuario que lo hacía, pero yo no consigo que funcione...

    En fín si sabéis algo estaría muy interesado en esto. Se trata de abrir un excel y escribir en él, pero creo que esta clase crea siempre uno nuevo si es con Excel_Writer.

    Un saludo,

     
  9. javirol |

    Necesitaba hacer un seguimiento de este post por eso vuelvo a escribir.

    Saludos,

     
  10. Anónimo |

    Estoy interesado en insertar una imagen en el archivo excel, se que se utiliza insertBitmap() pero no se como, hice una prueba pero no me dejo alguien me puede tirar una linea?
    Diego_volpe@hotmail.com

     
  11. Anónimo |

    [url=http://www.ganar-dinero-ya.com][img]http://www.ganar-dinero-ya.com/ganardinero.jpg[/img][/url]
    [b]Estas necesitando informacion sobre como ganar dinero[/b]
    Hemos encontrado la mejor guia en internet de como ganar dinero internet. Como fue de utilidad a nosotros, tambien les puede ser de utilidad a ustedes. No son solo formas de ganar dinero con su pagina web, hay todo tipo de metodos para ganar dinero en internet...
    [b][url=http://www.ganar-dinero-ya.com][img]http://www.ganar-dinero-ya.com/dinero.jpg[/img][/url]Te recomendamos entrar a [url=http://www.ganar-dinero-ya.com/]Ganar dinero[/url][url=http://www.ganar-dinero-ya.com][img]http://www.ganar-dinero-ya.com/dinero.jpg[/img][/url][/b]

     
  12. SymarCs |

    hola, muy interesante y funcional tu publicacion. Solo que tengo la misma duda que Javier.

    Al utilizar Spreadsheet_Excel_Writer si el archivo ya existia lo borraba y creaba uno nuevo.

    Como puedo hacerle para seguir agregando datos sin que se borren los anteriores. Por ejemplo tengo datos en las celdas 1,2,3 como le agrego datos a la celda 4 sin que me elimine los de la 1-3.

     
  13. Anónimo |

    Hola jeiff,
    sabes que he estado buscando por todos lados cómo agregar otra hoja a la planilla de excel y nadie parece saber, podrías ayudarme??
    Muchas gracias!!

     
  14. Anónimo |

    Para agregar más hojas a un mismo libro se utiliza el método addWorksheet(), asignado a otra variable. ej:
    $Hoja1 =& $Libro->addWorksheet('Hoja1');
    $Hoja2 =& $Libro->addWorksheet('Hoja2');
    $Hoja3 =& $Libro->addWorksheet('Hoja3');

    Y trabajo en la hoja que quiera.
    Saludazos amigos

     
  15. Anónimo |

    An outstanding share! I have just forwarded this onto
    a coworker who has been conducting a little homework on this.

    And he actually bought me breakfast due to the fact that I discovered it for him.
    .. lol. So allow me to reword this.... Thank YOU for the meal!
    ! But yeah, thanx for spending the time to discuss this topic here
    on your web site.

    Feel free to visit my page ... acheter followers twitter
    My web page: plus de twitter followers

     

Publicar un comentario