Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   exportar a excel desde php (https://www.clubdelphi.com/foros/showthread.php?t=37759)

halizia 22-11-2006 10:53:05

exportar a excel desde php
 
Hola!

quisiera exportar unos datos que obtengo desde php a un hoja de cálculo excel. ¿alguien sabe cómo hacerlo?

Saludos

Gracias!

roman 22-11-2006 15:04:16

Existen varias clases ya hechas para eso. Yo he usado el BiffWriter de Xavier Noguer con buenos resultados. No confundir con esta otra, que es excesivamente cara

Por cierto, estas clase sirven para crear hojas de excel con formato, pero también podrías optar por algo más sencillo como generar un CSV (archivo de valores separados por comas) que es fácil de hacer con PHP y que se puede leer en Excel.

// Saludos

bohemioloco 22-11-2006 18:07:49

Hola:

Te recomiendo visitar este hilo en él encontararas un script sencillo que puedes implementar.

Espero te sirva

Saludos

halizia 24-11-2006 11:08:20

meha gustado lo del csv, y quisiera saber si alguien podria hacer un pequeño ejemplo del codigo necesario para crear un archivo csv.

Gracias

dec 24-11-2006 14:47:02

Hola,

Código PHP:

<?php

/**
 * En este ejemplo utilizaremos como fuente de datos un sencillo Array. Natu-
 * ralmente, la fuente de datos en tu caso sería la propia base de datos, es
 * decir, la correspondiente consulta que te los retornara.
 */


// Fuente de datos (ficticia)
$fuenteDeDatos = array();

// Una "columna" de datos
$datosPersonas = array
(
  
'nombre' => 'Pedro',
  
'apellidos' => 'Caralamaro Periquito',
  
'ciudad' => 'El Cairo',
  
'pais' => 'Egipto'
);

// Añadimos los datos
$fuenteDeDatos[] = $datosPersonas;

// Otra "columna" de datos
$datosPersonas = array 
(
  
'nombre' => 'Juan',
  
'apellidos' => 'Altisonante Manrique',
  
'ciudad' => 'Oaxaca',
  
'pais' => 'México'
);

// Añadimos los datos
$fuenteDeDatos[] = $datosPersonas;

// Preparamos la salida (en formato CVS)
$archivoCvsSalida '';

// Recorremos la fuente de datos
foreach($fuenteDeDatos as $datosPersona)
{
  
/**
   * Y vamos ahora a añadir los datos al "archivo CVS".
   * 
   * Se trata de añadir los distintos valores separados por comas,
   * (de ahí las siglas CVS, Comma Value Separeted).
   * 
   * Creo que encerrar los propios valores entre comillas no es siempre
   * necesario, pero, ante la duda, yo lo hago así aquí. En todo caso...
   */
  
$archivoCvsSalida .= "\"{$datosPersona['nombre']}\",";
  
$archivoCvsSalida .= "\"{$datosPersona['apellidos']}\",";
  
$archivoCvsSalida .= "\"{$datosPersona['ciudad']}\",";
  
$archivoCvsSalida .= "\"{$datosPersona['pais']}\"";   
  
$archivoCvsSalida .= "\n";      
}

/**
 * Ahora podremos ver el archivo en el navegador. Lo hacemos entre etiquetas
 * de "preformateado" para que se pueda apreciar correctamente el retorno de
 * carro entre los distintos registros/columnas.
 */ 

echo '<pre>';
echo 
$archivoCvsSalida;
echo 
'</pre>';

/**
 * Si todo ha ido bien deberíamos ver algo como esto en el navegador:
 * 
 * "Pedro","Caralamaro Periquito","El Cairo","Egipto"
 * "Juan","Altisonante Manrique","Oaxaca","México"
 * 
 * Es decir, tenemos ahora un archivo en que cada una de sus filas representa
 * un registro en una base de datos. Estos datos están separados por comas y
 * hay un registro por cada fila.
 * 
 * Obviamente quien "importe" este archivo hará el resto, es decir, se supone
 * en este caso que contamos con una tabla en una base de datos con los campos
 * correspondientes: nombre, apellidos, ciudad y pais
 * 
 * El "importador" irá recorriendo el archivo línea por línea y añadirá los
 * valores en cada campo tal y como se los presentamos. Es decir, se entiende
 * que el primer valor corresponderá al campo "nombre", el segundo a "apellidos"
 * y así sucesivamente.
 * 
 */

?>


roman 24-11-2006 18:00:01

Otra cosa halizia, no mencionas desde dónde obtienes los datos, pero si los tomas de una consuulta de MySql, recuerda que éste tiene sentencias como SELECT ... INTO OUTFILE especiales para producir CSV y otro tipo de separadores.

// Saludos

dec 24-11-2006 18:47:39

Hola,

Cita:

Empezado por Román
Otra cosa halizia, no mencionas desde dónde obtienes los datos, pero si los tomas de una consuulta de MySql, recuerda que éste tiene sentencias como SELECT ... INTO OUTFILE especiales para producir CSV y otro tipo de separadores.

Pues lo hubieras dicho antes, leñe, y me hubiera evitado el código de más arriba. :D :D :D

roman 24-11-2006 18:53:02

El código nunca está de más. Pero también recuerda que no sabemos si halizia usa MySql. Es más, ni siquiera sabemos si usa una base de datos.

// Saludos

halizia 27-11-2006 11:33:17

los datos los cojo de una consulta pero no mysql si no postgresql, bueno en realidad es una mezcla de varias consultas, y los resultados los voy almacenando en un array. Voy a probar el código a ver q tal funciona.

Gracias a todos!!

halizia 27-11-2006 12:07:46

1 Archivos Adjunto(s)
Bueno pues debo de ser muy torpe ya que he probado y resulta que me sale todo en una celda :confused::confused::confused: no se q hago mal, os mando el código y el resultado.

Muchisimas gracias.

Código PHP:

$res='';
$res=$res." \"".$canal."\",";
for(
$i=0;$i<count($datos);$i++)        
     
$res=$res." \"".$datos[$i][1]."\",";
               
$res .= "\n";  

$sfile="archivo1.xls"
$fp=fopen($sfile,"w");
fwrite($fp,$res);
fclose($fp);
echo 
"<a href='$sfile'>Ver archivo</a>"


roman 27-11-2006 19:12:01

No entiendo muy bien si el archivo que adjuntas lo obtuviste directamente con el código que pones pues no veo de dóonde salen los datos binarios. En todo caso, si no mal entiendo lo que intentas hacer, el archivo que produces es un csv y no un xls. Aun cuando Excel pueda leer un csv, imagino que debes especificarle la extensión correcta.

// Saludos

dec 27-11-2006 19:18:56

Hola,

Y acaso no baste con especificar una extensión de archivo correcta, o sea ".cvs", sino que, lo que habría que hacer desde Excel sería importar el archivo ".cvs", imagino que en la base de datos apropiada. Es decir, ¿acaso va Excel a abrir el archivo ".cvs" y averiguar a qué base de datos corresponden los registros a importar? Yo de Excel no tengo mucha idea, pero, vamos, creo que el paso de "importar archivo CVS" tiene que darse... ¿o no? ;)

kayetano 27-11-2006 19:24:25

Hola

Excel en sus últimas versiones admite tablas HTML, es decir, tu creas un documento HTML donde metes todos los datos en una estructura de tabla y lo guardas con extensión XSL (si no me equivoco) y ya tienes un archivo que se puede abrir sin ningún problema en excel.

roman 27-11-2006 19:33:58

Hola dec, no entiendo bien a qué te refieres. Un CSV (que no CVS) es un archivo plano que nada tiene que ver con una base de datos. Pero esto tú lo sabes puesto que pusiste el ejemplo. En él, volcabas el resultado en el navegador, pero igualmente podías producir un archivo en disco. Ese archivo es plano, y basta que le pongas la extensión csv para que Excel lo lea correctamente.

Ahora, volviendo a la ley del mínimo esfuerzo, ¿no tendrá postgre algo similar a mysql?

// Saludos

dec 27-11-2006 19:38:22

Hola,

Yo voto porque PostGre tenga algo como MySQL, sí. Pero, de todas formas, a ver si me explico. Yo sé lo que es (aunque no perfectamente) un archivo "CVS", pero, por lo que sé entiendo que este tipo de archivos no son "de Excel", es decir, pueden usarse y se usan en otras aplicaciones.

Entonces, me digo, si el compañero quiere importar a Excel en concreto el archivo ".cvs" que genere, ¿no tendrá que hacer "algo" antes? Es decir, me refiero a después de tener el archivo ".cvs", ¿no tendría que importarlo en Excel? Es lo que yo pienso, vaya.

Ahora, que puede que me equivoque y Excel pueda abrir archivos ".cvs" sin más y tratarlos, etc., pues también puede ser... de hecho no me extrañaría nada. ;)

roman 27-11-2006 19:42:36

Hago un paréntesis para citarme a mi mismo :)

Cita:

Empezado por mimismo
Un CSV (que no CVS)

Regresando al punto. Sí, Excel, al menos desde hace unas cuantas versiones, puede importar archivos csv sin necesidad de que se lo digas explícitamente mediante un comando importar...Al abrir el csv, Excel en automático usa su rutina de importación.

// Saludos

dec 27-11-2006 19:45:56

Hola,

A no, ¿Eh? Eso sí que no... o CVS, o CSV, a ver si nos ponemos de acuerdo porque si no, no me aclaro. :eek: :eek: :D :D

roman 27-11-2006 19:49:12

Comma Separated Values

:)

// Saludos

dec 27-11-2006 19:56:44

Comma Values Separated

:eek:

roman 27-11-2006 20:00:47

Pero en inglés eso no tiene sentido, o en todo caso significaría algo como

Valores coma, separados

:eek:


La franja horaria es GMT +2. Ahora son las 14:35:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi