Exportar a Excel desde PHP
En realidad este truco no genera un archivo de Excel como lo conocemos normalmente, sino un tipo de XML que, por lo menos en el Office 2003, trae incorporado, llamado “Hoja de Calculo XML (*.xml)”. Vamos a explorar un poco este tipo de archivo y veremos como lo podemos aplicar a una salida de PHP, la cual luego podemos adaptar a nuestras salidas de datos y listados.
Bien, para no extendernos mucho la idea es hacer una hoja simple, después vamos a guardar como, y seleccionamos en tipo de archivo “Hoja de Calculo XML (*.xml)”
El archivo generado es un XML, por lo que podemos revisar su contenido con cualquier editor de textos y su contenido el es siguiente:
<?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> <Author>Autor</Author> <LastAuthor>Autor</LastAuthor> <Created>2006-12-04T20:10:16Z</Created> <Company>Empresa</Company> <Version>11.5606</Version> </DocumentProperties> <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> <WindowHeight>6105</WindowHeight> <WindowWidth>10425</WindowWidth> <WindowTopX>600</WindowTopX> <WindowTopY>90</WindowTopY> <ProtectStructure>False</ProtectStructure> <ProtectWindows>False</ProtectWindows> </ExcelWorkbook> <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Bottom"/> <Borders/> <Font/> <Interior/> <NumberFormat/> <Protection/> </Style> </Styles> <Worksheet ss:Name="Hoja1"> <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="4" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"> <Row> <Cell><Data ss:Type="String">Titulo</Data></Cell> </Row> <Row ss:Index="3"> <Cell><Data ss:Type="String">Dato 1</Data></Cell> <Cell><Data ss:Type="String">Dato 2</Data></Cell> <Cell><Data ss:Type="String">Dato 3</Data></Cell> </Row> <Row> <Cell><Data ss:Type="String">Dato 4</Data></Cell> <Cell><Data ss:Type="String">Dato 5</Data></Cell> <Cell><Data ss:Type="String">Dato 6</Data></Cell> </Row> </Table> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <PageSetup> <Header x:Margin="0"/> <Footer x:Margin="0"/> <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996" x:Right="0.78740157499999996" x:Top="0.984251969"/> </PageSetup> <Selected/> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name="Hoja2"> <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"/> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <PageSetup> <Header x:Margin="0"/> <Footer x:Margin="0"/> <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996" x:Right="0.78740157499999996" x:Top="0.984251969"/> </PageSetup> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> <Worksheet ss:Name="Hoja3"> <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"/> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <PageSetup> <Header x:Margin="0"/> <Footer x:Margin="0"/> <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996" x:Right="0.78740157499999996" x:Top="0.984251969"/> </PageSetup> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> </Workbook>
Hay que tener cuidado al manipular las partes que componen el documento, ya que una letra o una mayúscula/minúscula mal puesta puede hacer que Excel no lo pueda volver a abrir por errores de parseo.
Ahora vamos a explorar un poco la estructura, borraremos la información que no nos sirve.
El primer bloque <ExcelWorkbook></ExcelWorkbook> es donde se encuentran los datos de la hoja de Excel, el autor, la compañía, versiones, fecha de creación, etc. Se puede manipular los datos contenidos en el bloque sin ningún problema.
El bloque de <Styles></Styles> es donde aparecerán los estilos que usamos en la hoja, por ejemplo, negritas, cursivas, tamaño de texto, formatos de texto como fecha, moneda, numérico, etc. Todos esos estilos tienen un “ss:ID” con los que se pueden referenciar a una celda en particular. En este ejemplo no estoy usando ningún estilo diferente al normal o “Default”, pero es bueno comentarlo ya que en reportes mas avanzados a veces es necesario declarar un estilo o formato en las celdas afectadas.
Ahora viene lo interesante, los bloques <Worksheet></Worksheet> que son las hojas que contiene el libro, si nos ponemos a revisar con detalle, veremos que cada bloque tiene su propiedad “ss:Name” con el nombre de las hojas que aparecen en la parte de abajo del libro, para efecto de este artículo, elimino la hoja 2 y 3 lo cual va a reducir bastante el tamaño del XML.
Ahora si, me voy a centrar en el uso de la primera hoja, donde vemos un sub bloque llamado <Table></Table> donde se declaran algunas propiedades que debemos modificar:
- ss:ExpandedColumnCount: Esta propiedad es la que se encarga de limitar las columnas usadas en el documento, y en este ejemplo viene declarado un valor de “3” sin embargo, podemos eliminar esta propiedad y su valor, y así quitar las limitaciones.
- ss:ExpandedRowCount: Esta propiedad es la que nos limita la cantidad de filas permitidas. Al igual que la de las columnas podemos eliminar la propiedad y su valor para que no tengamos limitaciones y meter todas las filas que hagan falta.
- x:FullColumns, x:FullRows: Aún no se como para que sirven, pero tampoco me afectan así que podemos dejar estas propiedades y sus valores intactos.
- ss:DefaultColumnWidth: Es la que marca el tamaño de las columnas, por defecto tiene un valor de “60”, esta también podemos dejarla así.
Ahora si, ya podemos entrar a modificar los datos en los siguientes bloques, que es bastante fácil de entender y manipular. Los bloques <Row></Row> son las filas, y salvo que se indique lo contrario, cada bloque de fila aparece debajo de la última. En este ejemplo podemos ver que una de las filas, la segunda para ser preciso tiene una propiedad llamada “ss:Index” la cual indica la posición por índice de la ubicación de la fila, en este caso tiene el valor “3”, esto quiere decir; la primera fila del XML se encuentra en la primera fila del documento y la segunda fila del XML se encuentra ubicada en la tercera fila del documento, la siguiente fila no tiene declarada la posición, por lo que se asume que va debajo de la ultima.
Cada fila anida otros bloques, llamados <Cell></Cell> que son cada una de las celdas acomodadas de izquierda a derecha, de igual forma si no se especifica lo contrario se irán acomodando a la derecha de la última celda. Dentro de cada Celda, esta otro bloque llamado <Data></Data>, aquí básicamente se declara un estilo que deberá ser aplicado al contenido de la celda.
Con las modificaciones realizadas quedó el siguiente código XML:
<?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> <Author>Autor</Author> <LastAuthor>Autor</LastAuthor> <Created>2006-12-04T20:10:16Z</Created> <Company>Empresa</Company> <Version>11.5606</Version> </DocumentProperties> <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> <WindowHeight>6105</WindowHeight> <WindowWidth>10425</WindowWidth> <WindowTopX>600</WindowTopX> <WindowTopY>90</WindowTopY> <ProtectStructure>False</ProtectStructure> <ProtectWindows>False</ProtectWindows> </ExcelWorkbook> <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Bottom"/> <Borders/> <Font/> <Interior/> <NumberFormat/> <Protection/> </Style> </Styles> <Worksheet ss:Name="Hoja1"> <Table x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"> <Row> <Cell><Data ss:Type="String">Titulo</Data></Cell> </Row> <Row ss:Index="3"> <Cell><Data ss:Type="String">Campo 1</Data></Cell> <Cell><Data ss:Type="String">Campo 2</Data></Cell> <Cell><Data ss:Type="String">Campo 3</Data></Cell> </Row> <Row> <Cell><Data ss:Type="String">Dato 4</Data></Cell> <Cell><Data ss:Type="String">Dato 5</Data></Cell> <Cell><Data ss:Type="String">Dato 6</Data></Cell> </Row> </Table> <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <PageSetup> <Header x:Margin="0"/> <Footer x:Margin="0"/> <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996" x:Right="0.78740157499999996" x:Top="0.984251969"/> </PageSetup> <Selected/> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> </Workbook>
Lo interesante es que podemos crear un código en PHP que genere el texto con los bloques “Row” Se me ocurre un ejemplo muy simple: Separar el código XML en 3 partes: un template para la cabecera hasta antes del primer “row” que vamos a usar para generar el código, un script en PHP que llene las filas de datos y un template del pie del archivo. Para después enviarlo al navegador como un archivo “XLS” en lugar de “XML”
El código en PHP de ejemplo es el siguiente:
<?php $template_1 = "template_cabecera.inc"; $template_2 = "template_pie.inc"; // Se abre y extrae la cabecera del XML if ($gestor = fopen($template_1, "r")){ $header = fread($gestor, filesize($template_1)); fclose($gestor); } // Se genera el contenido agregando 10 filas $rows = ""; for ($i = 1; $i <= 10; $i++) { $rows .= "<Row>\n"; $rows .= "<Cell><Data ss:Type=\"String\">C1 - Row $i</Data></Cell>"; $rows .= "<Cell><Data ss:Type=\"String\">C2 - Row $i</Data></Cell>"; $rows .= "<Cell><Data ss:Type=\"String\">C3 - Row $i</Data></Cell>"; $rows .= "</Row>"; } // Se abre y extrae el pie del XML if ($gestor = fopen($template_2, "r")){ $footer = fread($gestor, filesize($template_2)); fclose($gestor); } // Se juntan las partes resultantes $content = $header . $rows . $footer; // Se envia el archivo al navegador header ("Content-type: application/x-msexcel"); header ("Content-Disposition: attachment; filename=\"excel_generated.xls\"" ); print $content; ?>
Una parte interesante de este código es la forma de enviarlo al navegador para su descarga, es importante que antes de esas líneas no se imprima nada, ya que las cabeceras o “header” deben mandarse antes de cualquier otra cosa.
Después de publicado este artículo, y revisando las búsquedas de cómo llegan a nosotros, me he encontrado con una gran cantidad de personas que buscan "cuantas hojas se pueden agregar a un libro Excel". A continuación se incluyen las limitaciones de Excel, sacada de la página de soporte de Microsoft.
| • | Tamaño de la hoja de cálculo: 65.536 filas por 256 columnas |
| • | Contenido en una celda (texto): 32.767 caracteres |
| • | Hojas de un libro: cantidad limitada por la memoria disponible |
| • | Nombres de un libro: cantidad limitada por la memoria disponible |
Todos los archivos y código usados en este artículo se encuentran listos para descarga a continuación. Espero que les sea de ayuda este artículo.
| Adjunto | Tamaño |
|---|---|
| generar_excel.zip | 3.52 KB |
![]() |
Estoy de acuerdo, según he podido ver el Office 2002 y el 2003 tienen soporte para estos tipos de XML, cada uno con su formato muy particular. Sería interesante que alguien que tenga Office 2000 nos diga si el Excel tiene guardado a XML, en caso de tenerlo todo sería bastante fácil. Por otro lado, si mi memoria no me falla, si haces un CSV pero le pones como extensión un ".xls" te lo abre directamente excel y se encarga automáticamente de parsearlo y convertirlo... es transparente para el usuario. |
![]() |
Hola que tal, excelente articulo, aunque como dicen no para todas las versiones de excel funciona, yo te recomiendo el paquete Spreadsheet Excel Writer de PEAR, es muy facil de usuar y funciona bien para cualquier version de excel. Saludos. |
![]() |
Hola Jeiff, gracias por tu aporte, efectivamente vamos a ver que tal nos funciona el Spreadsheet Excel Writer, sin embargo, dejame comentarte que con esta forma de usar plantillas, puedes crear unos documentos realmente bonitos usando muchas funciones y estilos de Excel... claro, en la mayoria de los casos esto no es necesario. Por último, ojalá que pudieras ayudar a esta comunidad escribiendo algun artículo sobre el uso de Spreadsheet Excel Writer y con mucho gusto te lo publicamos aquí. |
![]() |
Hola que tal nexus, he escrito un articulo el cual podras encontrar en mi blog: http://jeiff.blogspot.com/ |
![]() |
este articulo esta muy interesante gracias por subirlo me fue de mucha ayuda y solo me resta decir GRACIAS |
![]() |
hola! el ejemplo me sirvio de mucho... la verdad que lo use sin problemas... aunq eso sucedio hasta hoy que me fije que ocurre un error en el proceso ... el cual no c como solventar... todos los datos que envio desde el php los lleve a minuscula y sin caracteres especiales (ej.:@)... sin embargo me sigue dando el error de que NO SE PUEDE ABRIR ESTE ARCHIVO PORQ CONTIENE ERRORES. |
![]() |
Hola que tal. Excel crea un archivo de "log" de los errores de parseo que tenga tu archivo, igual ahi podría estar el problema. Te comento que he trabajado con esta forma en archivos generados de mas de 5,000 filas y me ha dado un excelente resultado. Si quieres, envíame un correo adjunto con el archivo generado para ver si te puedo ayudar en algo. Saludos |
![]() |
Hola me gusto mucho ese articulo, es que tengo este problema: Al generar un documento en excel en php en base a una plantilla xlt, la primera vez lo hace bien, pero si yo intento generar otro con el mismo nombre se bloquea. mi pregunta es Como Hago para generar autonumericos, es decir: documento generado primera vez camilo.xls |
![]() |
Pues en realidad algo automatizado no vamos a encontrar, pero se me ocurre por ejemplo, que en alguna tabla de una base de datos lleves un autonumérico, o mejor aún, por que no agregar un "timestamp" a tu archivo, de esta forma siempre vas a tener un nombre de archivo diferente, por ejemplo:
$filename = "archivo_" . time() . ".xls";
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=\"$filename\"" );
La función time, va a devolver el numero de segundos transcurridos desde el 1 de enero de 1970. También podrías armarte algún numero usando la función date(). |
![]() |
Muy buena pregunta, no creo que sea complicado, deja veo si es posible con mi método por XML. Con la librería Spreadsheet Excel solo es cosa que te leas la documentación del método insertBitmap a ver si eso te sirve. |
![]() |
Ya se como hacerlo con spreadsheet pero no me sirve de mucho agregarla desde el archivo xml seria lo ideal si consigues como te agradeceria la informacion gracias |
![]() |
Hola Gerardo, hoy ya me puse a revisar sobre el asunto de la imagen por medio del metodo XML y siento comentarte que por lo menos en Office 2003 esto no es posible. Puedes hacer "casi" todo menos guardar imagenes y formas en XML. |
![]() |
Disculpen tantas preguntas pero soy nuevo en esto: Se puede Combinar celdas con la Libreria de SpreadSheet? |
![]() |
Gracias nexus ya me puse a trabajar con spreadsheet y tengo todo listo a excepcion de un pequeño detalle en las impresiones , como hago para eliminar el pagebreak vertical que se genera automaticamente al hacer la hoja de excel, necesito eliminaro para agregar el pagebrak donde yo quiera o moverlo eso se puede? Gracias por la ayuda. |
![]() |
Hola, mi nombre es Pablo. No se pudo descargar phptoexcel.php de localhost. Lo curioso es que el Firefox funciona perfectamente. Sera problema de los headers?? Si alguien puede ayudarme lo agradeceria.. Graciass... Saludos |
![]() |
Hola Pablo Por lo que mencionas efectivamente es posible que sea un error en los headers, primero que nada debes revisar que no hagas ningún "echo" o "print" anterior al envío de los headers, ya que esto supondría un problema. Por otro lado, podrías postear aqui la parte de tu código que maneja los headers para revisar como funciona. Saludos |
![]() |
Hola!, Excelente tutorial, muchas gracias. ¿Se os ocurre porqué puede ser? Muchas gracias por vuestro tiempo!, |
![]() |
Hola Oskar. Voy a revisar el ejemplo y probarlo con MSIE para ver que puede estar pasando, en cuento tenga las pruebas te aviso por este medio. Saludos |
![]() |
Muchísimas gracias por tu tiempo... |
![]() |
Hola!, Gracias!, |
![]() |
como puedo configurar la pagina en horizontal con spreadsheet? |
![]() |
Hola, a mi también me pasa lo mismo con el explorer, es como si no pillara correctamente la parte de la cabecera donde se le indica el nombre del fichero. |
![]() |
Hola, como estan. |
![]() |
Hola a todos, queria sumarme a los comentarios sobre el problema que se presenta con IE a la hora de querer bajar el archivo excel generado. Con Firefox funciona sin problemas, pero IE no hay caso. He intentado modificar los headers de diversas formas pero no encuentro solucion. Los headers que tengo en mi codigo son: header("Content-Description: File Transfer"); Tambien lo he probado con: header("Content-type: application/vnd.ms-excel"); Y tambien con: header("Content-type: application/x-msdownload"); Y en todos el mismo resultado... con Firefox anda sin problemas y con IE me da el error: "No puede descargar generar_excel.php de ..." MUCHISIMAS GRACIAS !!! |
![]() |
Estas usando exactamente el ejemplo que puse "generar_excel.zip" o algún otro?. En un momento más verifico este mismo ejemplo en un IE a ver que resultados me da. Si deseas verificar, revisa en la siguiente dirección http://demos.developarts.com/excel/ en donde puse el ejemplo funcional. Saludos |
![]() |
Tengo un problema al exportar a excel estando en php via header("Content-type: application/vnd.ms-excel"); gracias de antemano luis rojas rojaslrp@yahoo.es |
![]() |
Hola Luis: Pues es bastante fácil de solucionar, en este mismo articulo, en el ejemplo, podrás ver que existe el tag "styles" <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Bottom"/> <Borders/> <Font/> <Interior/> <NumberFormat/> <Protection/> </Style> Es aquí donde se pueden definir distintos formatos para nuestras celdas, por ejemplo: <Style ss:ID="s22" ss:Parent="s18"> <NumberFormat ss:Format="#,##0.00_ ;[Red]\-#,##0.00\ "/> </Style> El cual tendrás que relacionar con una celda de la siguiente forma: <Cell ss:StyleID="s22"><Data ss:Type="Number">456.1</Data></Cell>Espero ser de ayuda. Saludos |
![]() |
Si me va ayudar aunque tengo que adicionar codigo , por que los valores que van en esa celda no tienen un formato unico |
![]() |
Hola:
a veces hay valores como 758090.1, en este caso no quisiera que se me aumente un cero, pero hay tambien 728456.124 en ese caso no quiero que me quite el tercer decimal, tambien hay 785420.250, o tambien puede ser un texto "papa amarilla", pero tu estilo me va ayudar.Para que te respete cualquier valor que incluyas en una celda lo único que tienes que hacer es tratar esas celdas como " string", por ejemplo:<Cell><Data ss:Type="String">dato</Data></Cell> Pasando a tu otra pregunta. usando tab para columnas(\t) y para filas (\n) cuando paso a la fila siguiente uso este codigo php($val es una fila)No pude entenderte muy bien, pero creo que lo que quieres es extraer valores separados por una tabulación, si es así, la respuesta quizá no sea " strlen", sino con "explode".Por ejemplo, me imagino que tienes algo así: l1dato1 \t l1dato2 \t l1dato3 \n l2dato1 \t l2dato2 \t l2dato3 \n l3dato1 \t l3dato2 \t l3dato3 \n Y si lo que quieres hacer es extraer cada uno de los valores separados por los tabuladores, puedes probar con: $data = explode("\t", $val); echo $data[0]; // te arroja "l1dato1" echo $data[1]; // te arroja "l1dato2" echo $data[2]; // te arroja "l1dato2" Ahora que si lo que realmente quieres es solo "eliminar" los tabuladores de tu texto, puedes hacerlo con la función " str_replace", por ejemplo:$val = str_replace("\t", " ", $val); Lo anterior va a reemplazar todos los tabuladores que encuentre en tu variable, por un espacio en blanco. Espero ser de ayuda. Saludos |
![]() |
Buenas quien me dice como hago para que la pagina de excel apenas abra se convierta en landscape, poder definir margenes y tamaño de pagina....gracias |
![]() |
Saludos amigos. De antemano muchas gracias por el tema de exportar a excel, me sirvio muchísimo para algunas cuestiones que tenia que realizar. De entrada a mi también me daba el mismo problema con IE, con el ejemplo me funcionaba perfecto pero el problema era a la hora de realizar consultas a la base de datos y que generara el archivo, mi teoria es que IE cuando recibe alguna descarga por headers lo abré en el momento y no espera a que termine de cargar o algo por el estilo, que es lo que realiza Firefox, entonces estuve investigando más sobre los headers en relación a IE, y me encontré este post lo cito. But in Internet Explorer, whenever I would click the link to downlad, I could only save the file. If I tried opening the file directly, it gave an error about not being able to find the temporary file.
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: private");
De Jeremy, en la página www.php.net Entonces, después de todo el choro que les acabo de hechar que por cierto aburrido, ajajaja mis cabeceras quedaron de la siguiente manera y me funciona perfectamente.
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=prueba.xls" );
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: private");
Suerte, espero les sirva como a mi. ::Halekz:: |
![]() |
Hola Halekz: Muchas gracias por tu aportación, fíjate que nunca hubiera caído en cuenta de este detalle, debido a que tengo la mala costumbre de poner exactamente esas cabeceras en todos mis desarrollos, y pues no me hubiera pasado por la cabeza, jejeje. Te agradezco mucho tus atenciones y estoy seguro que este dato le será de mucha ayuda a quienes nos visitan. Próximamente voy a actualizar este artículo y agregar tu aporte. Saludos |
![]() |
Hola Esto es antiguo pero... header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=excel.xls");
header("Pragma: no-cache");
header("Expires: 0");Y luego creo una pagina web normal usando una tabla y se le agregan las imagenes. Todo bien, pero ¿Como agrego una nueva hoja?... es que tengo que usar la misma hoja, por lo tanto debo usar la misma estructura de filas, y el documento excel no es igual en todo el largo de este. Si pudiera agregar una hoja seria estupendo, se puede hacer en XML pero este no acepta imagenes alguna ayuda ahh, las clases que hay por alli, si ingresan imagenes, pero hay que poner las coordenadas X e Y, lo que con un documento de tamaño variable se transforma en un infierno. |
![]() |
Hola Realmente soy muy nueva en este tema. así que tengo dos preguntas que tal vez parezcan bastante obvias. En el php donde se especifican las variables que deberían aparecer el el archivo excel? Gracias. |
![]() |
Sobre tu primera pregunta, efectivamente de eso se trata este artículo que como puedes ver, no es tan dificil una vez que le agarras el modo. Sobre tu segunda pregunta no hay ningun problema, para ellos deberás guardar el archivo de excel generado y después enviarlo con alguna herramienta para PHP de envío de correo electronico... ejem, te recomiendo el mio =) http://www.developarts.com/nomad_mimemail Saludos |
![]() |
miren muchacos yo toy recien haciendo este tema y veo que ya esta hace muxisimo tiempo en linea ! bueno mi problema es que ME SALE ESTE MENSAJEE !!! DE ERROR !! osea me exportar pero no en un EXCEL sino en la misma pagina web !! Warning: Cannot modify header information - headers already sent by (output started at /home/laencala/public_html/pag/adm/generar_excel.php:17) in /home/laencala/public_html/pag/adm/generar_excel.php on line 98 Pololito Web Pololito Web 2006-12-04T20:10:16Z Empresa: T & T Inmobiliaria Constructora y Asociados SRL 11.5606 6105 10425 600 90 False False Lista de COMO VEN !! POLOLITO ...... y T & T Inmobiliaria Constructora y Asociados SRL 11.5606 6105 SON DE LA BASE DE DATOS !! q lo consulta muy bien pero me bota ese error bueno ojala me ayuden GRACIAS mi correo es ceap1616@hotmail.com si pudieran responderme aca seria chevere GRACIAS |
![]() |
function xlsBOF() { function xlsEOF() { function xlsWriteNumber($Row, $Col, $Value) { function xlsWriteLabel($Row, $Col, $Value ) { // Query Database // Send Header De esta forma crean un .xml el cual lo reconose cualquier version del exel ...! Saludos ..! |




Para nosotros no nos sirve esta utilidad ya que aun utilizamos office 2000 y no tenemos la necesidad de actualizar, lo recomendable para nosotros seria esportar los datos en CSV, aun así esta muy buena la librería.
Slaudos