Foros del Web » Programando para Internet » PHP »

Exportar datos de un formulario a un EXCEL

Estas en el tema de Exportar datos de un formulario a un EXCEL en el foro de PHP en Foros del Web. SOLUCIONADO: Pido por favor al moderador que cierre o elimine este post. Hola En el curro me ha pedido un formulario de inscripción en mi ...
  #1 (permalink)  
Antiguo 03/01/2011, 11:05
 
Fecha de Ingreso: marzo-2008
Mensajes: 186
Antigüedad: 16 años, 1 mes
Puntos: 3
Exportar datos de un formulario a un EXCEL

SOLUCIONADO: Pido por favor al moderador que cierre o elimine este post.


Hola

En el curro me ha pedido un formulario de inscripción en mi página. Pero a última hora me han surgido los siguientes problemas:

1- El cliente que no quiere el uso de base de datos y sólo me ha pasado los datos FTP cuándo necesito crear una base de datos en su hosting

2- Quieren que al cumplimentar el formulario los datos se almacenen en un EXCEL (no visible para los usuarios,claro).

El inconveniente es que no sé como generar archivos EXCEL a partir de datos de formularios PHP sin que sean representados en pantalla (sólo que se cree el archivo en el directorio de carpetas y punto). Y la opción MySql está descartada.

Espero vuestra ayuda, gracias por anticipado.

Para adelantar os pongo la inicialización del código de validación del formulario:

Código PHP:
Ver original
  1. <?php
  2. //compruebo que "submit" el botón de enviar está definido
  3. if (isset($_POST['submit'])){
  4. if(!empty($_post['campo-formulario'])){
  5. //aquí el codigo que debe ir para pasar los datos validados a un excel
  6. echo "<p>Datos agregados con éxito.</p>";
  7. }else{
  8. echo "<p>datos no agregados</p>";
  9. }
  10. ?>

Última edición por PSPforever; 03/01/2011 a las 12:07
  #2 (permalink)  
Antiguo 04/01/2011, 02:30
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Exportar datos de un formulario a un EXCEL

Hola ps, en principio el archivo Excel lo puedes generar perfectamente con HTML.
Es decir, envía los datos por formulario, los procesas generando un archivo HTML con el formato que te han solicitado. El resultado se guarda en un archivo con extensión xls y no te tiene que dar más problemas.
Mientras estás en desarrollo, utiliza las siguientes cabeceras para debuear el resultado:


Código PHP:
ob_start();
ob_end_clean();
header("Content-type: application/vnd.ms-excel");
header(Content-Dispositioninlinefilename=tarifa_excel.xls 
Espero que te sirva, un saludo
  #3 (permalink)  
Antiguo 04/01/2011, 02:36
Avatar de Trublux  
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Exportar datos de un formulario a un EXCEL

Yo suelo usar "php_writeexcel-0.3.0", viene con algunos ejemplos para colorear las celdas, el texto, etc.

P.D.: Un poquito tonto el cliente ¿no?.
  #4 (permalink)  
Antiguo 04/01/2011, 12:02
 
Fecha de Ingreso: marzo-2008
Mensajes: 186
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Exportar datos de un formulario a un EXCEL

Antes que nada chicos, gracias por vuestra ayuda, da gusto preguntar aquí.

Al final creo el excel utilizando el archivo agpform.php que lo he visto googleando y disponible para descarga. En resumen, formulario en el html, proceso con el archivo cagpform y se crea el excel en el directorio, pero aún me queda una duda.

Sólo comentar una duda que tengo para que en excel aparezcán las comillas, acentos,etc. y no sé dónde colocar el utf8_decode en el archivo agpform.php cuyo código publico debajo para la codificación de carácteres.

Código PHP:
Ver original
  1. <?php
  2. $success = "confirmacion.php";
  3.     $error = "error.php";
  4.    
  5.     // Change this to the character(s) you want to be placed instead of line breaks(new line, enter, etc)
  6.     $lbChar = " ";  // default is a space, you may change it to whatever you want
  7.    
  8.     // Don't change anything below this line       
  9.    
  10.     // Determine if the form was sent through the GET methog or the POST method.
  11.     if($_POST){
  12.         $array = $_POST;
  13.     } else if($_GET){          
  14.         $array = $_GET;
  15.     } else {
  16.             die("You must Access this file through a form.");   // If someone accesses the file directly, it wont work :)
  17.     }  
  18.  
  19.     //Check if the filename was sent through the form or not
  20.     if(!$array['filename']){
  21.         // if the filename wasnt sent through the form, it will become form.xls, you can change the default if you want.
  22.         $array['filename'] = "datos-registro.xls";  //Set the file to save the information in
  23.    
  24.     } else {
  25.         if(!(stristr($array['filename'],".xls"))){
  26.             $array['filename'] = $array['filename'] . ".xls";
  27.         }
  28.     }
  29.    
  30.     // Define the tab and carriage return characters:
  31.     $tab = "\t";    //chr(9);
  32.     $cr = "\n";     //chr(13);
  33.    
  34.     if($array){
  35.             // Make The Top row for the excel file and store it in the $header variable
  36.             $keys = array_keys($array);
  37.             foreach($keys as $key){
  38.                 if(strtolower($key) != 'filename' && strtolower($key) != 'title'){
  39.                     $header .= $key . $tab;
  40.                 }
  41.             }
  42.             $header .= $cr;
  43.            
  44.             //Make the line with the contents to write to the excel file.
  45.             foreach($keys as $key){
  46.                 if(strtolower($key) != 'filename' && strtolower($key) != 'title'){
  47.  
  48.                     $array[$key] = str_replace("\n",$lbChar,$array[$key]);
  49.                     $array[$key] = preg_replace('/([\r\n])/e',"ord('$1')==10?'':''",$array[$key]);
  50.                     $array[$key] = str_replace("\\","",$array[$key]);
  51.                     $array[$key] = str_replace($tab, "    ", $array[$key]);
  52.                     $data .= $array[$key] . $tab ;
  53.                 }
  54.             }
  55.             $data .= $cr;
  56.            
  57.             if (file_exists($array['filename'])) {
  58.                 $final_data = $data;        // If the file does exist, then only write the information the user sent
  59.             } else {
  60.                 $final_data = $header . $data;      // If file does not exist, write the header(first line in excel with titles) to the file
  61.             }
  62.             // open the file and write to it
  63.            
  64.             $fp = fopen($array['filename'],"a"); // $fp is now the file pointer to file $array['filename']
  65.            
  66.             if($fp){
  67.                
  68.                 fwrite($fp,$final_data);    //Write information to the file
  69.                 fclose($fp);        // Close the file
  70.                 // Success
  71.                 header("Location: $success");
  72.             } else {
  73.                 // Error
  74.                 header("Location: $error");
  75.             }
  76.     }
  77. ?>

Cita:
Yo suelo usar "php_writeexcel-0.3.0", viene con algunos ejemplos para colorear las celdas, el texto, etc.

P.D.: Un poquito tonto el cliente ¿no?.
Investigaré el que dices, porque seguramente me pedirán que se permita colorear celdas, etc.

Respecto al cliente, no es por hacer sangre, pero cada proyecto algunos clientes me lo ponen más complicado por la falta de cooperación que tienen y para escuchar recomendaciones.
  #5 (permalink)  
Antiguo 21/10/2015, 23:29
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Exportar datos de un formulario a un EXCEL

PSPforever: pudiste resolver lo del utf-8 en el archivo agpform.php? Por favor dime cómo. Tengo el mismo problema. Gracias

Etiquetas: excel, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:23.