¿No te serviría en .csv? Excel los abre por defecto y se muestran en formato de tabla.
Yo lo exporto con este código que cogí de algún sitio y modifiqué un poco.
Código PHP:
//Fichero exportar csv
//Generamos el fichero CSV
//requiere que le pasen el nombre del fichero
//ej. $csv_file="reporte.csv"
//Y opcional el directorio
//$directorio ="/csv/";
//El fichero se genera tanto para subir por FTP como para exportar a fichero CSV
$nombreBD = "nombre de tu bd";
$consulta = sprintf( "SELECT * FROM tabla" );
if (!isset($directorio)) {$directorio="";}
$ruta = $directorio.$csv_file;
include("conexion.php"); //AQUÍ yo incluí mi conexion a la base de datos
$csv_end = "
";
$csv_sep = ";"; //separador entre datos
$csv="";
//Si es un archivo hay que hacer un echo para que lo guarde sino lo metemos en la variable
if (isset($enArchivo)) {echo 'codigo'.$csv_sep.'nombre'.$csv_sep.'refprov'.$csv_sep.'pvp6'.$csv_sep.'exisTotal'.$csv_sep.'codigo2'.$csv_end;}
else { $csv = 'codigo'.$csv_sep.'nombre'.$csv_sep.'refprov'.$csv_sep.'pvp6'.$csv_sep.'exisTotal'.$csv_sep.'codigo2'.$csv_end; }
while($row=mysql_fetch_array($resultado))
{
if (isset($enArchivo)) {echo $row['codigo'].$csv_sep.$row['nombre'].$csv_sep.$row['refprov'].$csv_sep.$row['pvp6'].$csv_sep.$row['exisTotal'].$csv_sep.$row['codigo2'].$csv_end; }
else {
$csv.=$row['codigo'].$csv_sep.$row['nombre'].$csv_sep.$row['refprov'].$csv_sep.$row['pvp6'].$csv_sep.$row['exisTotal'].$csv_sep.$row['codigo2'].$csv_end;
}
}
if (!isset($enArchivo)) //Si es en fichero no guardamos copia
{
//Generamos el csv de todos los datos
if (!$handle = fopen($ruta, "w")) {
echo "No se tiene permiso para abrir el fichero";
$log = new entrada_log("ERROR. No se tiene permiso para abrir el fichero $ruta.");
exit;
}
if (fwrite($handle, utf8_decode($csv)) === FALSE) {
$log = new entrada_log("Error, no se tiene permiso para escribir en el fichero $ruta.");
echo "No se tiene permiso para escribir en el fichero";
exit;
}
$log = new entrada_log("El fichero CSV se ha generado correctamente.");
fclose($handle);
}
Tendrás que modificar muchas cosas para que te funcione. Ojo a los campos que quieres exportar también que los tienes que poner a mano.
Ahora el fichero que llama al include anterior para generar el fichero:
Código PHP:
//fichero include_generaCSV
include ("./includes/clases.php");
$csv_file = date('Y-m-d__H.i')."__nombreFichero.csv";
$enArchivo = TRUE; //para diferenciar que el que lo tiene que subir en FTP del que genera el fichero
// Añadimos las cabeceras para decirle que tiene que devolver un fichero con nombre.csv
header( "Content-Type: text/csv" );
header( "Content-Disposition: attachment;filename=$csv_file" );
include "include_generaCSV.php";
Cuando lo llamo desde subir.ftp pues en lugar de devolverme el archivo se sube directamente al ftp.
Luego el formulario que lleva a generaCSV:
Código PHP:
//fichero con el boton para generar el .csv
<strong>Exportar en CSV</strong>
<form method="post" action="exportarCSV.php" name="exportar">
<input type="submit" name="subir" value="Exportar"/>
</form>
Aquí te dejo también la clase que incluí para generar el log. Lo hice para probar de crear clases que no tenía ni idea. No se si está bien o mal pero funciona
![muerto de risa](http://static.forosdelweb.com/fdwtheme/images/smilies/biggrin.png)
:
Código PHP:
//clases.php (va con un include en todos)
class entrada_log {
var $fichero;
var $fecha;
function __construct($texto) { //Constructor de la clase
$this->fichero = fopen("log.log","a"); //a es modo lectura y coloca el puntero al final
$this->fecha = date("d-m-Y H:i:s \t");
fwrite($this->fichero, $this->fecha . $texto . PHP_EOL);
fclose($this->fichero);
}
}
// Para escribir un registro simplemente ponemos
// $log = new entrada_log("Mensaje a añadir al log");
Aquí te dejo también mi conexion.php que va también en include CADA vez que quiero hacer algo de la BD:
Código PHP:
$servidor = 'localhost';
$usuario = 'usuario';
$clave = 'pass';
$conn = mysql_connect($servidor, $usuario, $clave) or die( mysql_error("No se pudo conectar"));
mysql_select_db( $nombreBD, $conn ) or die( mysql_error( $conn ) );
$resultado = mysql_query( $consulta, $conn ) or die( mysql_error( $conn ));
if (isset($cerrarConexion))
{
mysql_close();
$unset ($cerrarConexion);
}
Para usarlo:
Código PHP:
$nombreBD = "nombre de tu bd";
$consulta = "SELECT * FROM tabla";
//Y te queda el resultado de la consulta en la variable $resultado para hacer lo que quieras con ella
Creo que no se me olvida nada, espero que te sirva.
NOTA: Parece que le di a quotear en lugar de editar. Borrad el anterior post si puede ser!