Como escribir Hojas de Excel desde PHP
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.
![]() |
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. |
![]() |
hola a todos, dime hay manera de decir que la hoja se genere horizontalmente??? |
![]() |
estuve ejecutando varios programas en php utilizando Spreadsheet_Excel_Writer, y tambien ejecute el tuyo, pero siempre me sale este error: porque? |
![]() |
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 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. |
![]() |
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 |
![]() |
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? |
![]() |
me da ese error al ejecutarlo ¿que puede ser? |
![]() |
No tienes la clase Writer.php que es la que contiene esta clase para ser utilizada |
![]() |
ÐÏࡱá;þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 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þÿÿÿþÿÿÿþÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ |
![]() |
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 |
![]() |
hola que tal, yo tambien necesito leer un archivo ya generado y escribir en una celda espcifica, como puedo hacer esto??? |
![]() |
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 |
![]() |
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??? |
![]() |
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 linearequire_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 |
![]() |
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??? |
![]() |
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 |
![]() |
Alguien sabe como hacer que la primera fila tenga autofiltro? |
![]() |
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.? |
![]() |
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 |
![]() |
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 |
![]() |
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 |
![]() |
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(); 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. |
![]() |
hola estoy usando esta galeria y me andubo bien 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();
?> |
![]() |
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... |
![]() |
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 |
![]() |
Hola! |
![]() |
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. |



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