Como escribir Hojas de Excel desde PHP


PHPPara 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():
Nos 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 libro 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 función 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 función 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.



Imagen de Anónimo

DESCARGUE LA CLASE, PERO NO CONTIENE EL ARCHIVO LLAMADO PEAR.PHP, alguien me lo puede enviar a gus.webness@gmail.com

Imagen de nexus
Puedes descargarte PEAR desde http://pear.php.net/package/PEAR/, aunque te voy a recomendar que te leas http://pear.php.net/manual/es/introduction.php para que te des una idea de más o menos de que se trata.

Una vez que te bajes el paquete, descomprímelo en algún lugar y asegurate de que en el "php.ini" en la opción "include_path" se encuentre añadido el directorio donde descomprimiste. Por último, reinicia tu servidor HTTP y listo, ya debería de tener PEAR funcionando.
Imagen de Anónimo

hola a todos, dime hay manera de decir que la hoja se genere horizontalmente???
gracias.

Imagen de Anónimo

estuve ejecutando varios programas en php utilizando Spreadsheet_Excel_Writer, y tambien ejecute el tuyo, pero siempre me sale este error:
Warning: Cannot modify header information - headers already sent by

porque?

Imagen de nexus
Ese error aparece cuando quieres modificar o agregar las cabeceras de un HTML para que tenga algún tipo de comportamiento (como por ejemplo la descarga) pero antes ya enviaste algo al navegador. Por ejemplo:

<?php
// Quiero enviar un texto como adjunto
$text = "Este texto se enviara como adjunto";
echo "Otra linea de texto";

// Se envía el archivo al navegador
header ("Content-type: text/plain");
header ("Content-Disposition: attachment; filename=\"archivo de texto.txt\"" );
print $text;
?>

El ejemplo anterior no te va a funcionar, debido a que existe un "echo" antes del envío del archivo. Si comentas la linea del "echo", entonces si va a funcionar la prueba.

Este error es bastante común y solo falta un espacio o una linea para que el envío un funcione. Por ejemplo:


<?php // Esto no va a funcionar, por que hay un salto de linea antes de que empiece el tag de PHP ?>

 <?php
// Esto no va a funcionar, por que antes hay un espacio antes de que empiece el tag de PHP
?>

Básicamente la cosa esta en que si previamente enviaste algo, por ejemplo un espacio, entonces se envían las cabeceras automáticamente al navegador (por defecto manda HTML) y ya te quedas sin la posibilidad de hacer nada más.

Espero haberte ayudado.
Imagen de Anónimo

INSTALE TODO LO NECESARIO PARA EJECUTAR EL SCRIPT Y SIN EMBARGO CUANDO LO EJECUTO EL RESULTADO ES ALGO COMO:

ÐÏࡱá;þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

ALGUNO SABE SI ESTO ES RESULTADO DE UNA MALA INSTALACION??

YA HE REINSTALADO EL PAQUETE VARIAS VECES Y NO ARROJA NINGUN ERROR

Imagen de Anónimo

este ejemplo tiene comillas sencillas y comillas dobles, pero en realidad son otro caracter distinto, sustituye estas supuestas las comillas sencillas y las dobles por los caracteres qeu corresponden de verdad.

Imagen de Anónimo

Nesesito escribir algunas celdas de un archivo en excel que ya existe y que tiene algunas celdas protegidas y ademas tiene macros, esto se puede?

Imagen de Anónimo

me da ese error al ejecutarlo ¿que puede ser?

Imagen de Anónimo

No tienes la clase Writer.php que es la que contiene esta clase para ser utilizada

Imagen de Anónimo

ÐÏࡱá;þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ l ÉBä ‘Hoja1’=¼%r8X"1ÈÿArial1ÈÿArial1ÈÿArial1ÈÿArial1ÈÿArial1È Arial1Èÿ¼Arialàõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À àõÿ À à À à À à À “€ÿ’â8ÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€ÀÀÀ€€€™™ÿ™3fÿÿÌÌÿÿffÿ€€fÌÌÌÿ€ÿÿÿÿÿÿ€€€€€ÿÌÿÌÿÿÌÿÌÿÿ™™Ìÿÿ™ÌÌ™ÿÿÌ™3fÿ3ÌÌ™ÌÿÌÿ™ÿfff™–––3f3™f333™3™3f33™333…U‘Hoja1’ l É*+€‚Áƒ„&è?'è?(ð?)ð?¡"dXXà?à? Escribir hojas en excel> ¶ Root Entryÿÿÿÿÿÿÿÿ ÀFº³HÍǺ³HÍÇ€Book ÿÿÿÿÿÿÿÿÿÿÿÿ ÀFSþÿÿÿþÿÿÿþÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

Imagen de nexus
Hola, me parece que vas por el buen camino, de hecho todo ese código me parece que es exactamente el formato de un XLS, quizá el error este en el envío del archivo como tal.

Como seguramente habrás tratado, el archivo se envía por medio de $libro->send('ejemplo.xls'); sin embargo esto afecta directamente a las cabeceras "headers" que se envían al navegador, por lo que cuando ejecutes tu script, no debe de tener ninguna otra salida al navegador que no sea el proceso de la creación del libro de excel.

Para mas referencia te recomiendo que leas el siguiente comentario que seguramente se aplicará en tu caso.

Saludos
Imagen de trucutrucu

hola que tal, yo tambien necesito leer un archivo ya generado y escribir en una celda espcifica, como puedo hacer esto???

Imagen de nexus
Por el momento desconozco si se pueda abrir y leer celdas de un archivo de Excel. Los artículos que aquí tenemos, solo hablan de como generarlos y guardarlos.

Saludos
Imagen de trucutrucu

gracias por responder, yo he leido acerca de la herramienta Spreadsheet_Excel_Reader, de PEAR, ya la descargue, pero no se bien como se usa, tu has escuchado acerca de ella, la has usado???
gracias nuevamente

Imagen de nexus
Pues en realidad de eso se trata este artículo escrito por Jeiff, la idea general es que te bajes el paquete del "Spreadsheet", dentro podrás encontrar que tiene varios archivos dentro de un directorio llamado "Spreadsheet_Excel_Writer-x.x.x".

Ese directorio muevelo dentro de tu proyecto y puedes renombrarlo, por ejemplo, "Spreadsheet" para de esta formas llamarlo en PHP con la linea

require_once 'Spreadsheet/Excel/Writer.php';

De esta forma te será mucho mas fácil seguir los pasos que describe Jeiff en el presente artículo.

Saludos
Imagen de trucutrucu

de hecho ya la baje desde hace mucho, pero segun entiendo lo que hace es que genera un archivo excel, y yo no quiero generar, el archivo ya lo tengo, solo quiero que al abrirlo me jale los datos de mysql y los posicione en la celda correspondiente, con esta herramienta podria hacer esto???

Imagen de nexus
Esta clase, me parece que no soporta "modificar" un archivo de excel, yo creo que la solución mas próxima sería usar el formato XML de excel, donde ahí si podrás rellenar celdas, y si usas un motor de templates es mucho más fácil.

Mas info en este artículo
Imagen de trucutrucu

ok, gracias, buscare sobre como hacerlo con lo que me dices

Imagen de Anónimo

Alguien sabe como hacer que la primera fila tenga autofiltro?

Imagen de Anónimo

Hola, he bsucado por todos lados pero no encuentro que hacer..

kiero pasar datos de consultas a excel, pdf, y rtf desde una base de datos en MS SQL en php pero no logro hacerlo, he bajado algunos ejemplos pero estan en mysql y al momento de adaptarlos a mssql me marcan errores supongo es porque no se trabaja igual en mysql ke en mssql… alguien que me pueda orientar.?

Imagen de nexus
Pues en realidad debería ser muy parecido, la adaptación es casi trasparente salvo que las funciones para MySQL empiezan por "mysql_" y las de SQL Server empiezan por "mssql_".

Por favor pon aquí los errores que te dá, para saber por donde va el problema.

Saludos
Imagen de Anónimo

me sale el siguiente error Failed opening required 'sistema/excel/Spreadsheet/Excel/Writer.php' (include_path='.;c:\apache\php\pear') in c:\apache\htdocs\sistema\prueba.php on line 3

espero me puedan ayudar

Imagen de nexus
El error que tienes es simplemente por que tu aplicacion no ha podido incluir la librería Writer.php. Revisa que en verdad exista la ruta 'sistema/excel/Spreadsheet/Excel/Writer.php' relativa a tu 'prueba.php'.

Saludos
Imagen de Anónimo

Hola
Alguien a probado a insertar imagenes?.-
saludos

Imagen de Anónimo

Quiero trabajar con ficheros de excel muy grandes de unas 30000 columnas y el maximo de columnas con el que me esta permitido trabajar es 16384 y no se como cambiar a 65536. He mirado en los ficheros y he encontrado esto en el worksheet.php

$this->Spreadsheet_Excel_Writer_BIFFwriter();
$this->_BIFF_version = $BIFF_version;
$rowmax = 65536; // 16384 in Excel 5
$colmax = 256;

Pero no entiendo muy bien porque no me va y a que se refiere con lo de excel 5. Tengo el excel 2003 con SP2.

Si alguien puede ayudarme lo agradecería.

Imagen de Anónimo

hola estoy usando esta galeria y me andubo bien
lo modifique para
usarlo con una base de datos
el tema es que ahora lo estoy queriendo usar de nuevo
y no me dice , no sale nada, ni un error ni nada quiero
que lo vean a ver que puede estar pasando
este es el scrit

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());
	echo "no se genera";
}
echo "si se genera";
// Este es el titulo
$resultados = mysql_query("SELECT * FROM $nombreTabla ");
$g=0;
$unRegis = mysql_fetch_assoc($resultados);
$etiquetas = array_keys($unRegis);
	foreach($etiquetas as $cadaEtiq) {
	$hoja->write(0, $g++, $cadaEtiq, $negrita);
	}



$D=0;
$T=1;
$resul = mysql_query("SELECT * FROM $nombreTabla");
while ($unRegistro = mysql_fetch_assoc($resul)){
foreach($unRegistro as $datos){

if ($Dwrite($T, $D, "$datos");
$D++;
}else{
$T++;
$D=0;
$hoja->write($T, $D++, "$datos");
}
}
}
// Generamos nuestro libro de excel
$libro->send('Contactos_uip.xls');
$libro->close();
?>

Imagen de Anónimo

Hola quiero agradecer a este portal de ayuda, ya que este es un medio de comunicación completo, quiero decirles que estoy dando clases de PHP en la universidad Don Bosco, y es un agrado para mi conocer, identificar y practicar este contenidos de interés...

www.webmastercortezavelar.itgo.com

Imagen de nexus

Que bueno que le agradan los contenidos de mi sitio, espero poder seguir colaborando con nuevos artículos y por que no, permitir a quien así lo quiera a publicar sus propios textos relacionados aquí.

Saludos

Imagen de Anónimo

Hola!
Estoy haciendo una aplicacion en mysql y php, estoy utilizando este codigo para ver si me genera el archivo como dices, copie el codigo q tienes aqui pero no me sale nada, que debo hacer?
La verdad soy nueva con esto de exportar en excel, inicialmente lo q necesito es que me exporte con el fomato que yo quiero pero no logro hacerlo.
Porfa si me puedes explicar te estaria muy agradecida.
Gracias nuevamente.

Imagen de Anónimo

Para corregir ese pequeño inconveniente deben ir al php.ini y configurar en la parte de:

ouput_buffering=On

o puede ser

ouput_buffering=4096

Si no tienen acceso al php.ini entonces en un archivo .htaccess deben poner lo siguiente:

php_flag output_buffering=On

o puede ser

php_flag output_buffering=4096

Espero que su problema se solucione.

Suerte a todos.

Enviar un comentario nuevo

  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Saltos automáticos de líneas y de párrafos.
Más información sobre opciones de formato

Captcha Image: you will need to recognize the text in it.
Igrese las letras que puede ver en la imagen superior