Foros del Web » Programando para Internet » PHP »

PHPExcel para exportar tabla de base de datos a excel

Estas en el tema de PHPExcel para exportar tabla de base de datos a excel en el foro de PHP en Foros del Web. Buenas, llevo mas de una semana intentando pasar la información de 2 columnas de una tabla de mi base de datos pero no hay manera, ...
  #1 (permalink)  
Antiguo 08/05/2014, 08:18
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
PHPExcel para exportar tabla de base de datos a excel

Buenas, llevo mas de una semana intentando pasar la información de 2 columnas de una tabla de mi base de datos pero no hay manera, lo e probado de diversas maneras, pero nada... Ahora estoy probandolo con el PHPExcel, que e leido que es la mejor manera, pero no lo consigo, directamente con el PHPExcel no consigo que me guarde nada en el documento de excel (.xlsx) por lo tanto estoy haciendo algo mal. Lo que necesito es que coja la columna field_name y field_val de mi base de datos y ponga la columna field_val en la columna A del documento de excel, y la columna field_name de la base de datos en la columna B del documente de excel. Mi codigo es este:

Código PHP:
require_once 'Classes/PHPExcel.php';
require_once 
'Classes/PHPExcel/IOFactory.php';

  
$objPHPExcel = new PHPExcel();
  
  global 
$wpdb;
  
  
$query1 $wpdb->get_results "
    SELECT field_name, field_val
    FROM  wp_cformsdata
  " 
);
  
  
$exec1 mysql_query($query1) or die ("Error in Query1".mysql_error());

  
$tmparray =array("Nom","Valor");

  
$sheet =array($tmparray);

  while (
$res1 mysql_fetch_array($exec1))
  {
  foreach(
$sheet as $row => $columns) {
    foreach(
$columns as $column => $data) {
        
$worksheet->setCellValueByColumnAndRow($column$row 1$data);
    }
  }
  }
   
header('Content-type: application/vnd.ms-excel');
   
header('Content-Disposition: attachment; filename="name.xlsx"');
  
$worksheet $objPHPExcel->getActiveSheet();
  foreach(
$sheet as $row => $columns) {
    foreach(
$columns as $column => $data) {
        
$worksheet->setCellValueByColumnAndRow($column$row 1$data);
    }
  }

  
$objPHPExcel->getActiveSheet()->getStyle("A1:I1")->getFont()->setBold(true);
  
$objPHPExcel->setActiveSheetIndex(0);
  
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel2007');
  
$objWriter->save("name.xlsx"); 
Espero que me podais ayudar porque estoy desesperado ya y no se que hacer... Añadir que tengo las librerias puestas, y no se si es relevante pero trabajo con una pagina echa en wordpress

Gracias de antemano!
  #2 (permalink)  
Antiguo 08/05/2014, 08:30
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: PHPExcel para exportar tabla de base de datos a excel

No es mas facil exportar a CSV ?

fputcsv() es muy facil de usar
__________________
Salu2!
  #3 (permalink)  
Antiguo 08/05/2014, 08:40
 
Fecha de Ingreso: noviembre-2010
Ubicación: en las nubes
Mensajes: 56
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: PHPExcel para exportar tabla de base de datos a excel

bueno en primera no veo donde declaras $worksheet, el uso de esta librería es muy sencillo.
en esta pagina te dice como hacer lo http://www.codedrinks.com/crear-un-reporte-en-excel-con-php-y-mysql/
__________________
la mejor soluciones no es la mas complicada, si no con la mejor ingenio
  #4 (permalink)  
Antiguo 08/05/2014, 08:42
 
Fecha de Ingreso: noviembre-2010
Ubicación: en las nubes
Mensajes: 56
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: PHPExcel para exportar tabla de base de datos a excel

otra opcion aun que no me gusta. es que en html crees una tabla y en la parte de arriba en las primeras lineas agregues
Código PHP:
Ver original
  1. header("Content-type: application/vnd.ms-excel");
  2. header("Content-Disposition:  filename=\"ReporteHaberes.xls\";");
__________________
la mejor soluciones no es la mas complicada, si no con la mejor ingenio
  #5 (permalink)  
Antiguo 08/05/2014, 08:58
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: PHPExcel para exportar tabla de base de datos a excel

Italico, una de las cosas que probe es el putcsv, y si, claramente es mas facil, pero no consegui que me guardara la información en 2 columnas, me ponia toda la información. Me explico mejor, en las columas field_name de la base de datos pone: nombre, apellidos, empresa, etc, y en el field_val, elle, lawliet, etc. Con el fputcsv lo que hacie era ponerme:

Columna A
Nombre, Elle
Apellidos, Lawliet

Y yo lo necesito asi:

Columna A Columna B
Nombre Elle
Apellidos Lawliet

Y no lo consegui, por eso ahora probava con el PHPExcel

Si quieres echarle un vistazo al codigo del fputcsv es este:

Código PHP:
Ver original
  1. include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );
  2.  
  3.  
  4.                         function csv_export() {
  5.                             global $wpdb;
  6.  
  7.                             $qry = array();
  8.                             $qry[] = "SELECT field_name, field_val";
  9.                             $qry[] = "FROM wp_cformsdata";
  10.                             $qry[] = "ORDER BY f_id";
  11.  
  12.  
  13.                             $result = $wpdb->get_results(implode(" ", $qry), ARRAY_A);
  14.  
  15.                             if ($wpdb->num_rows > 0) {
  16.  
  17.                                $filename = "dades.csv";
  18.  
  19.                                 header( 'Content-type: text/csv' );
  20.                                 header( 'Content-Disposition: attachment;filename='.$filename);
  21.                                
  22.                                 $fp = fopen('dades.csv', 'w');
  23.  
  24.                                 $hrow = $result[0];
  25.  
  26.                                 fputcsv($fp, array_keys($hrow));
  27.                                 echo "<br>";
  28.  
  29.                                 foreach ($result as $data) {
  30.                                     fputcsv($fp, $data);
  31.                                     echo "<br>";
  32.                                 }
  33.  
  34.                                 fclose($fp);
  35.  
  36.                             }
  37.  
  38.                             ob_end_clean();
  39.  
  40.                         }

Hufex, me mirare esa pagina haber que tal.

Gracias a los 2, haber si de una vez por todas consigo solucionar esto ya
  #6 (permalink)  
Antiguo 09/05/2014, 08:45
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: PHPExcel para exportar tabla de base de datos a excel

E mirado el link que puso Hufex, la verdad es que todo muy claro y lo e entendido todo, lo e echo siguiendo los pasos y tal, pero me sigue sin dar ningun resultado, no hace nada! y e seguido todos los pasos! No se que tengo mal...

Pongo el codigo haber si alguien lo ve...

Código PHP:
//Se crea la conexion y se verifica, si no se conecta termina aqui y da error
$conexion = new mysqli('******','*******','********','*******',3306);
if (
mysqli_connect_errno()) {
   
printf("La conexión con el servidor de base de datos falló: %s\n"mysqli_connect_error());
   exit();
}

//Una vez conectados hacemos la consulta para obtener los datos
$consulta "SELECT field_name AS nom, field_name AS valor FROM wp_cformsdata ";
 
$resultado $conexion->query($consulta);

//Ahora comprobamos si se han obtenido datos, si el numero de registros es mas grande que 0, es que ha obtenido datos y podemos crear el reporte
if($resultado->num_rows ){
//Aqui se determina si se está accediendo al archivo vía HTTP o CLI, el archivo solo se va a mostrar si se accede desde un navegador web(HTTP).
if (PHP_SAPI == 'cli')
    die(
'Este archivo solo se puede ver desde un navegador web');
    
//Aqui se arma el reporte de excel
 
require_once 'Classes/PHPExcel.php';
 
// Se crea el objeto PHPExcel
 
$objPHPExcel = new PHPExcel();

 
//agregamos las propiedades del archivo de Excel
// Se asignan las propiedades del libro
$objPHPExcel->getProperties()->setCreator("NexusL"// Nombre del autor
    
->setLastModifiedBy("NexusL"//Ultimo usuario que lo modificó
    
->setTitle("Reporte Excel con PHP y MySQL"// Titulo
    
->setSubject("Reporte Excel con PHP y MySQL"//Asunto
    
->setDescription("Simposiums"//Descripción
    
->setKeywords("Info simposiums"//Etiquetas
    
->setCategory("Reporte excel"); //Categorias

//Para los títulos del reporte crea dos variables, de esta forma es más fácil realizar cambios si el reporte fuera muy extenso.
$tituloReporte "Info simposiums";
$titulosColumnas = array('nom''valor');

//El reporte tien 2 columnas: Nom y valor. Por lo tanto solo vamos a ocupar hasta la columna B.
// Se combinan las celdas A1 hasta D1, para colocar ahí el titulo del reporte
$objPHPExcel->setActiveSheetIndex(0)
    ->
mergeCells('A1:B1');
 
// Se agregan los titulos del reporte
$objPHPExcel->setActiveSheetIndex(0)
    ->
setCellValue('A1',$tituloReporte// Titulo del reporte
    
->setCellValue('A3',  $titulosColumnas[0])  //Titulo de las columnas
    
->setCellValue('B3',  $titulosColumnas[1])

//Se agregan los datos de los alumnos
 
 
$i 4//Numero de fila donde se va a comenzar a rellenar
 
while ($fila $resultado->fetch_array()) {
     
$objPHPExcel->setActiveSheetIndex(0)
         ->
setCellValue('A'.$i$fila['nom'])
         ->
setCellValue('B'.$i$fila['valor'])

     
$i++;
 }
 
 
//Asignamos el ancho de las columnas de forma automática en base al contenido
 
for($i 'A'$i <= 'D'$i++){
    
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension($i)->setAutoSize(TRUE);
}

// Se asigna el nombre a la hoja
$objPHPExcel->getActiveSheet()->setTitle('Simposiums');
 
// Se activa la hoja para que sea la que se muestre cuando el archivo se abre
$objPHPExcel->setActiveSheetIndex(0);

// Inmovilizar paneles
//$objPHPExcel->getActiveSheet(0)->freezePane('A4');
$objPHPExcel->getActiveSheet(0)->freezePaneByColumnAndRow(0,4);

// Se manda el archivo al navegador web, con el nombre que se indica, en formato 2007
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="name.xlsx"');
header('Cache-Control: max-age=0');
 
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel2007');
$objWriter->save('name.xlsx');
exit;
}
else{
    
print_r('No hay resultados para mostrar');

Evidentemente los datos de conexion son los corretos, aqui los e quitado. Alguien be algo? Estoy desesperado ya!
  #7 (permalink)  
Antiguo 09/05/2014, 23:18
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: PHPExcel para exportar tabla de base de datos a excel

Nadie sabe porque no me funciona? Esque no lo entiendo, no veo que es lo que tengo mal.
  #8 (permalink)  
Antiguo 10/05/2014, 08:04
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: PHPExcel para exportar tabla de base de datos a excel

Consejo: no insistas tanto..... nadie tiene obligacion de depurar tu codigo ;)

Prueba distintas alternativas..... si ninguna te funciona, implementa la tuya propia, de ultima lo que quieres hacer no es tan complicado
__________________
Salu2!
  #9 (permalink)  
Antiguo 10/05/2014, 12:34
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: PHPExcel para exportar tabla de base de datos a excel

Podrías poner al inicio de tu código estas lineas

error_reporting(E_ALL);
ini_set("display_errors", 1);

Para que te muestre cualquier posible error o adevertencia.
No veo para qué creas los header manualmente si la librería ya lo hace por ti, sin embargo, por las líneas que tienes, estás guardando en el servidor el archivo

$objWriter->save('name.xlsx');

sin embargo, nunca lo envías a la salida, sólo las cabeceras.

Es decir tienes dos opciones, o dejar que la librería envíe las cabeceras y el archivo por ti, o guardas el archivo en el servidor como ya lo haces, y muestras al usuario un link para que descargue el archivo, pero mezclas ambas y ni una ni otra.
  #10 (permalink)  
Antiguo 12/05/2014, 04:44
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: PHPExcel para exportar tabla de base de datos a excel

italico, tienes razon y pido disculpas pero esque estoy desesperado porque no me sale... ocp001a no tenia ni idea de que la libreria creaba la cabecera, lo que si es verdad es que en el codigo no pongo como descargar el archivo, pero en la pagina donde tiene que ir el boton que llama a la pagina que genera el archivo tengo un link para descargarlo. El problema es el que digo, no me guarda nada en el archivo.

Ahora que se lo de las cabeceras probare de quitarlas haber si asi funciona, aparte de quitar las cabeceras tendria que modificar algo mas? o solo quitandolas ya esta?

Gracias!
  #11 (permalink)  
Antiguo 12/05/2014, 14:46
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: PHPExcel para exportar tabla de base de datos a excel

Revisando la última documentación de phpexcel no encontré el método para que la librería haga el envío de las cabeceras, en cambio indica cómo hacerlas por ti mismo:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="myfile.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');


En este caso de todos modos faltaba que hicieras la salida del archivo en vez de guardarlo.

Pero regresando a la sugerencia de que actives los errores y advertencias, si las activas y realmente phpexcel no puede crear el archivo, te lo informará, si no muestra errores es que quizá estés buscando el archivo en una carpeta que no es la correcta.
  #12 (permalink)  
Antiguo 12/05/2014, 16:02
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: PHPExcel para exportar tabla de base de datos a excel

Lo de los erros lo e puesto, con ponerlo al principio del codigo ya esta no? No me muestra ningun error ni nada. Tambien e puesto la cabeceras y la salida del archivo tal qual lo has puesto tu, y sigue sin hacer nada.

Que archivo puede ser que busque en una carpeta que no sea la correcta?
  #13 (permalink)  
Antiguo 24/06/2015, 04:24
Avatar de TamyZamb  
Fecha de Ingreso: mayo-2015
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: PHPExcel para exportar tabla de base de datos a excel

Italico, has escrito dos veces y en ninguna das ningún tipo de ayuda.

Etiquetas: phpexcel
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 20:00.