viernes, 22 de mayo de 2015

Crear un archivo .CSV con PHP

Al querer todo más automatizado en estos tiempos, comenzamos a requerir de nuevas funciones adecuadas a php con otra herramienta como excel, pdf o csv.
En este tutorial vamos a mostrar un ejemplo sencillo de como usar las cabeceras dentro de php para formar y crear un archivo .csv y exportarlo a nuestra pc.





Para poder crear un archivo .csv desde nuestro php debemos tener en cuenta los headers o cabeceras.

Creamos el nombre del .csv en una variable llamada $Name y los titulos que van a llevar cada columna en otra variable llamada $Datos.

$Name = 'Reporte_UltimaCuotaPaga.csv';
$FileName = "./$Name";
$Datos = 'NOMBRE;APELLIDO;TELEFONO;CIUDAD';
$Datos .= "\r\n";

Cuando tengamos esto traemos todas las cabeceras que van a formar el .csv ; esto lo que hace es obligar al archivo a descargarse y a abrirse en excel. Podemos escoger abrirlo como csv en blog de notas. ya es a nuestro gusto.

En este ejemplo se usa excel como visor del archivo.

//Descarga el archivo desde el navegador
header('Expires: 0');
header('Cache-control: private');
header('Content-Type: application/x-octet-stream'); // Archivo de Excel
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Last-Modified: '.date('D, d M Y H:i:s'));
header('Content-Disposition: attachment; filename="'.$Name.'"');
header("Content-Transfer-Encoding: binary");

Con esto ya podemos descargar el documento que necesitemos en .csv; para hacer el ejemplo más completo vamos a crear una  consulta en sql que se encargara de traer los datos para el archivo. Se espera que se tenga una conexión a una base de datos previa.
 
//conection: 
$link = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($link)); 

/**1.  consultar sap_maestro_cartera_v3 **/
$sSQL = "SELECT 
         nombre,
         apellido,
         telefono,
         ciudad                     
 FROM datos_personales
       ";
$RsSql = $link->mysqli_query($sSQL);

Se crea un while que recorra todas las filas que traerá la consulta usualmente yo utilizo mysql_fetch_array pero quería mostrarles otra forma de hacerlo y también es muy sencillo es con mysql_fetch_object.  Hay que tener en cuenta que en este caso se va a tratar al resultado como objetos llamándolos en la variable #Datos que es la que vamos a imprimir al final del while.

while($oRow = mysql_fecth_object($RsSql) ){
    $Datos .= "$oRow->nombre;$oRow->apellido;$oRow->telefono;$oRow->ciudad;   ";
    $Datos .= "\r\n"; 

}#end while

echo $Datos;

El script completo quedaría de la siguiente manera.
Datos_personales.php

//conection: 
$link = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($link)); 

$Name = 'Reporte_UltimaCuotaPaga.csv';
$FileName = "./$Name";
$Datos = 'NOMBRE;APELLIDO;TELEFONO;CIUDAD';
$Datos .= "\r\n";

//Descarga el archivo desde el navegador
header('Expires: 0');
header('Cache-control: private');
header('Content-Type: application/x-octet-stream'); // Archivo de Excel
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Last-Modified: '.date('D, d M Y H:i:s'));
header('Content-Disposition: attachment; filename="'.$Name.'"');
header("Content-Transfer-Encoding: binary");

/**1.  consultar sap_maestro_cartera_v3 **/
$sSQL = "SELECT 
         nombre,
         apellido,
         telefono,
         ciudad                     
 FROM datos_personales
       ";
$RsSql = $link->mysqli_query($sSQL);

while($oRow = mysql_fecth_object($RsSql) ){
    $Datos .= "$oRow->nombre;$oRow->apellido;$oRow->telefono;$oRow->ciudad;   ";
    $Datos .= "\r\n"; 

}#end while

echo $Datos;

13 comentarios:

  1. gracias por tu aporte llevaba medio dia buscando hacer funcionar ese code.. gracias ..

    saludes desde nicaragua

    ResponderEliminar
  2. Yo remplazaria la ultima linea por echo utf8_decode($Datos); para que aparezcan con acento.

    ResponderEliminar
  3. Perdon me falto decir, excelente aporte.

    ResponderEliminar
  4. Este codigo sirve para otros manejadores de base de datos?

    ResponderEliminar
  5. Me fué muy útil "/r/n"
    Grácias, excelente aporte

    ResponderEliminar
  6. si el resultado son varias lineas, como hago para que aparezcan? solo me sale la última.

    ResponderEliminar
    Respuestas
    1. Probablemente se te está pasando concatenarlas.

      Eliminar
  7. Esto si es mucha maravilla, funciona igual para SQL gracias.

    ResponderEliminar
  8. Necesito hablar contigo andrescastillo1985@gmail.com de https://www.achotv.com

    ResponderEliminar
  9. ya esta obsoleta en navegadores mas recientes , los header, pero se recomienda usar y al pricnipio y fin del codigo

    ResponderEliminar