Ver Mensaje Individual
  #8 (permalink)  
Antiguo 01/06/2012, 11:12
Avatar de Erick_Lucas
Erick_Lucas
 
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 4 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