Foros del Web » Programando para Internet » PHP »

problemas para exportar a excel

Estas en el tema de problemas para exportar a excel en el foro de PHP en Foros del Web. Hola, estoy utilizando el siguiente código para generar un archivo en excel a partir de PHP. El problema que tengo es que hay veces que ...
  #1 (permalink)  
Antiguo 16/05/2012, 07:55
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
problemas para exportar a excel

Hola,
estoy utilizando el siguiente código para generar un archivo en excel a partir de PHP.

El problema que tengo es que hay veces que el archivo excel aparece en blanco. Hago varias exportaciones y la primera aparece en blanco, otras aparece el contenido, la tercera vez, por ejemplo, aparece en blanco otra vez...

Cual podría ser el problema?

Un saludo gracias.


Código PHP:
header('Content-type: application/vnd.ms-excel'); 
header("Content-Disposition: attachment; filename=mi_archivo.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
  #2 (permalink)  
Antiguo 16/05/2012, 10:03
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: problemas para exportar a excel

Saludos, sucede que sí lo haces así no es una exportación a Excel propiamente dicha, sino que escribe un formato HTML que lo hace pasar como Excel.

Para exportar a Excel desde PHP no existe mejor librería que PHPExcel la uso en mi trabajo y cuando necesito generar reportes personales.
  #3 (permalink)  
Antiguo 16/05/2012, 10:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 78
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: problemas para exportar a excel

Erick_Lucas tiene toda la razon, Erick podrias pasar un link con la documentacion o algun ejemplo de PHPExcel?
  #4 (permalink)  
Antiguo 16/05/2012, 14:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 2 meses
Puntos: 55
Respuesta: problemas para exportar a excel

una manera simple de hacerlo es guardar una tabla html en un archivo.xls y luego forzar que descargue ese archivo.

saludos.
  #5 (permalink)  
Antiguo 16/05/2012, 16:21
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: problemas para exportar a excel

Cita:
Iniciado por wilo087 Ver Mensaje
Erick podrias pasar un link con la documentacion o algun ejemplo de PHPExcel?
Me gustaría mucho pero al parecer soy muy nuevo como para poner links en Foros del Web. No sé qué tenga que suceder o a cuántos mensajes deba llegar, en fin.

La página oficial es esta: http://phpexcel.codeplex.com/ y todo será cosa de deambular por el contenido de la documentación.

Si desean un ejemplo me avisan nada más
  #6 (permalink)  
Antiguo 21/05/2012, 03:00
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: problemas para exportar a excel

Para exportar una imagen (gráficos) hecha con PHP a excel como debería hacerlo?

Un saludo.
  #7 (permalink)  
Antiguo 21/05/2012, 03:01
 
Fecha de Ingreso: septiembre-2005
Mensajes: 522
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: problemas para exportar a excel

Cita:
Iniciado por Erick_Lucas Ver Mensaje
Si desean un ejemplo me avisan nada más
Por mi si, si puedes poner algún ejemplo.

Un saludo y gracias.
  #8 (permalink)  
Antiguo 01/06/2012, 11:12
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: problemas para exportar a excel

Disculpas por la tardanza, tuve ocupaciones que atender en mi trabajo.

El siguiente código me permitió generar un Libro para el Rol de Pago en donde laboro. No voy entrar en detalles sobre la conexión a la base de datos ni al llamado de datos, únicamente he comentado las líneas que aplican la librería PHPExcel.

Código PHP:
Ver original
  1. <?php
  2. /*
  3.    Llamo a las librerías necesarias para la generación, deben estar en el mismo
  4.    directorio que mi archivo PHP
  5. */
  6. include 'PHPExcel/PHPExcel.php';
  7. include 'PHPExcel/PHPExcel/Writer/Excel2007.php';
  8. ?>
  9.  
  10. <html>
  11. <body>
  12. <table border="2">
  13. <tr>
  14. <th>ID</th>
  15. <th>CODIGO</th>
  16. <th>VALOR</th>
  17. <th>C.I.</th>
  18. <th>APELLIDOS Y NOMBRES</th>
  19. </tr>
  20.  
  21. <?php
  22. $conexion = oci_connect('Usuario', 'Password', 'BaseDeDatos');
  23. if  (isSet($_POST['BotonParaGenerar']))
  24. {
  25.     $sentencia = oci_parse($conexion, "consultaAGenerar");
  26.     oci_execute($sentencia);
  27.    
  28.     // Creo mi objeto PHPExcel
  29.     $objPHPExcel = new PHPExcel();
  30.    
  31.     // Mi nombre como el Creador
  32.     $objPHPExcel->getProperties()->setCreator("Erick Lucas");
  33.     // Le doy nombre a las propiedades del libro
  34.     $objPHPExcel->getProperties()->setTitle("Rol de Pago");
  35.  
  36.     // Asigno el método getActiveSheet() a $hojita
  37.     $hojita = $objPHPExcel->getActiveSheet();
  38.     // Le doy titulo a mi hoja activa
  39.     $hojita->setTitle('MiRol');
  40.  
  41.     // Escribo el título en la primera celda de la grilla
  42.     $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Listado ROL DE PAGO');
  43.    
  44.     // Seteo los encabezados de columna
  45.     $hojita->setCellValue('A4', 'CODIGO');
  46.     $hojita->setCellValue('B4', 'CODIGO');
  47.     $hojita->setCellValue('C4', 'VALOR');
  48.     $hojita->setCellValue('D4', 'C.I.');
  49.     $hojita->setCellValue('E4', 'APELLIDOS Y NOMBRES');
  50.    
  51.     // Mi variable contadora inciará el llenado de datos en las celdas desde la fila 6
  52.     $i=5;
  53.    
  54.     // Inicio el recorrido
  55.     while   ($fila = oci_fetch_array($sentencia, OCI_NUM+OCI_RETURN_NULLS))
  56.     {
  57.         $i++;
  58.         echo "<tr>";
  59.        
  60.             echo "<td>".$fila[0]."</td>";
  61.             $hojita->setCellValue('A'.$i, $fila[0]);
  62.            
  63.             echo "<td>".$fila[1]."</td>";
  64.             $hojita->setCellValue('B'.$i, $fila[1]);
  65.            
  66.             echo "<td>".$fila[2]."</td>";
  67.             $hojita->setCellValue('C'.$i, $fila[2]);
  68.            
  69.             echo "<td>".$fila[3]."</td>";
  70.             $hojita->setCellValue('D'.$i, $fila[3]);
  71.            
  72.             echo "<td>".$fila[4]."</td>";
  73.             $hojita->setCellValue('E'.$i, $fila[4]);
  74.            
  75.         echo "</tr>";
  76.     }
  77.  
  78.     /*
  79.        Aquí establezco como las columnas obtendrán un ancho y un alto especifico
  80.        según los datos que en las celdas se cuentren
  81.     */
  82.     $highestColumn = $objPHPExcel->getActiveSheet()->getHighestColumn();
  83.    
  84.     $highestRow = $objPHPExcel->getActiveSheet()->getHighestRow();
  85.  
  86.     $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
  87.    
  88.     for ($column=0; $column < $highestColumnIndex ; $column++)
  89.     {
  90.         $objPHPExcel->getActiveSheet()->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($column))->setAutoSize(true);
  91.     }
  92.  
  93.     /*
  94.         También puedo aplicar formato, aca establezo que la primera celda tendrá
  95.         negrita y tamaño 16. Los encabezados de columna también tendrán negrita
  96.     */
  97.     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);  
  98.     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(16);
  99.     $objPHPExcel->getActiveSheet()->getStyle('A4')->getFont()->setBold(true);
  100.     $objPHPExcel->getActiveSheet()->getStyle('B4')->getFont()->setBold(true);
  101.     $objPHPExcel->getActiveSheet()->getStyle('C4')->getFont()->setBold(true);
  102.     $objPHPExcel->getActiveSheet()->getStyle('D4')->getFont()->setBold(true);
  103.     $objPHPExcel->getActiveSheet()->getStyle('E4')->getFont()->setBold(true);
  104.    
  105.     /*
  106.         Creo un nuevo objeto para generar en .xlsx (para versiones anteriores a
  107.         Office 2007 deben cambiar el '2007' y colocar '5'
  108.     */
  109.     $objGuardar = new PHPExcel_Writer_Excel2007($objPHPExcel);
  110.    
  111.     // Establezco el nombre de mi Libro de Excel con fecha y hora de generación
  112.     $actual = getdate();
  113.     $nombreLibro = 'Rol_de_pago_'.$actual['mday'].'_'.$actual['month'].'_'.$actual['year'].'_'.$actual['hours'].'h'.$actual['minutes'].'.xlsx';
  114.    
  115.     // Guardo (genero) mi Libro
  116.     $objGuardar->save($nombreLibro);
  117.    
  118.     // Desconecto todas las hojas trabajados
  119.     $objPHPExcel->disconnectWorksheets();
  120.  
  121.     // Libero los recursos de los objetos creados
  122.     unset($objPHPExcel);
  123.     unset($objGuardar);
  124.    
  125.      // Envio un 'alert' informando que la generación ha sido exitosa.
  126.     echo "<script>window.alert('El archivo de Excel se ha generado')</script>";
  127. }
  128. ?>
  129.  
  130. </table>
  131. </body>
  132. </html>

Lo que me otorga el siguiente resultado:



Espero les sea de utilidad, no olviden el karma. Saludos desde Manta, Ecuador!

Última edición por Erick_Lucas; 01/06/2012 a las 11:20

Etiquetas: excel
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 17:10.