Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

fputcsv para guardar en un excell en mas de 1 columna

Estas en el tema de fputcsv para guardar en un excell en mas de 1 columna en el foro de WordPress en Foros del Web. Buenas, primero de todo pedir perdon si el post no iria aqui, esque no tengo muy claro si ponerlo aqui o en php, pero como ...
  #1 (permalink)  
Antiguo 02/05/2014, 04:39
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
fputcsv para guardar en un excell en mas de 1 columna

Buenas, primero de todo pedir perdon si el post no iria aqui, esque no tengo muy claro si ponerlo aqui o en php, pero como estoy haciendolo para wordpress, lo pongo aqui...
Ahora mi problema, tengo una base de datos donde la información esta asi:

field_name field_val
nombre Elle
apellido Lawliet
empresa X

Y asi con con 7 nombres diferentes en la columna llamada field_name, me guarda toda la información ahi. Ahora yo lo que tengo que hacer es guardar esa información en un archivo de excell (uso fputcsv porque me permite abrirlo en el excell y despues que el usuario lo guarde como quiera) pero el problema que tengo es que me lo guarda todo en una sola columna, por ejemplo

Columna A
nombre,Elle
apellido,Lawliet
empresa,X

Y asi con todo, yo lo que necesito es que me lo guarde en columnas diferentes, asi:
nombre apellido empresa
Elle Lawliet X

No se si con el fputcsv se puede hacer o tendria que usar otra función. Si alguien me puede ayudar me haria un fabor enorme, pongo mi codigo para que lo veais

Código PHP:
                        include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );


                        function 
csv_export() {
                            global 
$wpdb;

                            
$qry = array();
                            
$qry[] = "SELECT field_name, field_val";
                            
$qry[] = "FROM wp_cformsdata";
                            
$qry[] = "ORDER BY f_id";


                            
$result $wpdb->get_results(implode(" "$qry), ARRAY_A);

                            if (
$wpdb->num_rows 0) {

                               
$filename "dades.csv";

                                
header'Content-type: text/csv' );
                                
header'Content-Disposition: attachment;filename='.$filename);
                                
                                
$fp fopen('dades.csv''w');

                                
$hrow $result[0];

                                
fputcsv($fparray_keys($hrow));
                                echo 
"<br>";

                                foreach (
$result as $data) {
                                    
fputcsv($fp$data);
                                    echo 
"<br>";
                                }

                                
fclose($fp);

                            }

                            
ob_end_clean();

                        } 
Asi es como tengo el codigo ahora, pero lo e ido modificando y probando muchas cosas.

Muchas gracias!
  #2 (permalink)  
Antiguo 02/05/2014, 12:25
Avatar de TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 3 meses
Puntos: 193
Respuesta: fputcsv para guardar en un excell en mas de 1 columna

Pues si es mas PHP que WordPress. ahora puedes intentar algo así:

Código PHP:
Ver original
  1. if ($wpdb->num_rows > 0) {
  2.  
  3. $filename = "dades.csv";
  4.  
  5. header( 'Content-type: text/csv' );
  6. header( 'Content-Disposition: attachment;filename='.$filename);
  7.  
  8. $fp = fopen('dades.csv', 'w');
  9.  
  10. $hrow = $result[0];
  11.  
  12. fputcsv($fp, array('Nombre', 'Apellido', 'Empresa', 'Otra Columna'));
  13.  
  14. foreach ($result as $data) {
  15.     fputcsv($fp, array($data['some1'], $data['some2'], $data['some3'], $data['some4']));
  16. }
  17.  
  18. fclose($fp);
  19.  
  20. }

Fijate como en el foreach se hace el fputcsv con todos los valores que quieres en una fila, el valor de cada columna es un item del array.
  #3 (permalink)  
Antiguo 05/05/2014, 07:29
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: fputcsv para guardar en un excell en mas de 1 columna

E probado tal como dices pero el problema que tengo es que si, ahora me muestra, por ejemplo:

Nombre, Apellidos, etc
Elle, Lawliet, etc

Me lo sigue mostrando en la misma columna del documento de excell, quiza es que no me explique bien, yo lo que necesito es que nombre este en A1, elle en A2, Apellidos en B1, Lawliet en B2, etc en C1, y asi, supongo que con el fputcsv, no se puede, e visto que hay una classe en php que se llama phpExcell, que con eso se supone que lo puedo hacer, pero no me acaba de salir, tengo esto:

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

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

  
//Set header with temp array
  
$tmparray =array("page","title","Nombre","Apellidos","Empresa","Telefono","email","Comentarios","Acepto");
  
//take new main array and set header array in it.
  
$sheet =array($tmparray);

  while (
$res1 mysql_fetch_array($exec1))
  {
    
$tmparray = array();
    
$page $res1['page'];
    
array_push($tmparray,$page);
    
$title $res1['title'];
    
array_push($tmparray,$title);
    
$nombre $res1['Nombre'];
    
array_push($tmparray,$nombre);
    
$apellidos $res1['Apellidos'];
    
array_push($tmparray,$apellidos);
    
$empresa $res1['Empresa'];
    
array_push($tmparray,$empresa);
    
$telefono $res1['Telefono'];
    
array_push($tmparray,$telefono);
    
$email $res1['email'];
    
array_push($tmparray,$emaiñ);
    
$comentarios $res1['Comentarios'];
    
array_push($tmparray,$comentarios);
    
$acepto $res1['Acepto'];
    
array_push($tmparray,$acepto);
    
array_push($sheet,$tmparray);
  }
   
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);
    }
  }

  
//make first row bold
  
$objPHPExcel->getActiveSheet()->getStyle("A1:I1")->getFont()->setBold(true);
  
$objPHPExcel->setActiveSheetIndex(0);
  
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel2007');
  
$objWriter->save("name.xlsx"); 
Recuerdo que en la tabla de la base de datos esta asi:

field_name field_val
Nombre Elle
Apellidos Lawliet
Empresa X
etc X

El codigo que e puesto, directamente no me guarda nada, alguna idea? seria conveniente que abriera un post nuevo en el apartado de php???

Gracias!!

Edito:

Para probar almenos si me guarda los valores en el excell estoy probando de coger directamente la columna field_name y field_val de la base de datos y ponerlas respectivamente en las columnas A y B del documento de excel, pero tampoco me funciona...

El codigo es este:
Código PHP:
/** Incluir la libreria PHPExcel */
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
  " 
);
  
  
//$query1 = "SELECT field_name, field_val FROM wp_cformsdata";
  
$exec1 mysql_query($query1) or die ("Error in Query1".mysql_error());

  
//Set header with temp array
  
$tmparray =array("Nom","Valor");
  
//take new main array and set header array in it.
  
$sheet =array($tmparray);

  while (
$res1 mysql_fetch_array($exec1))
  {
    
$tmparray = array();
    
$nom $res1['nom'];
    
array_push($tmparray,$nom);
    
$valor $res1['valor'];
    
array_push($tmparray,$valor);

    
array_push($sheet,$tmparray);
  }
   
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);
    }
  }

  
//make first row bold
  
$objPHPExcel->getActiveSheet()->getStyle("A1:I1")->getFont()->setBold(true);
  
$objPHPExcel->setActiveSheetIndex(0);
  
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel2007');
  
$objWriter->save("name.xlsx"); 

Última edición por ElleLawliet; 05/05/2014 a las 08:16
  #4 (permalink)  
Antiguo 05/05/2014, 08:55
Avatar de TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 3 meses
Puntos: 193
Respuesta: fputcsv para guardar en un excell en mas de 1 columna

el ejemplo que te di me genera columnas por cada valor:

Código PHP:
Ver original
  1. <?php
  2.     $fp = fopen('test.csv', 'w');
  3.     fputcsv($fp, array('Nombre', 'Apellido', 'Empresa'));
  4.     for($i = 0; $i < 10; $i++) {
  5.         fputcsv($fp, array('Nombre' . $i, 'Apellido' . $i, 'Empresa' . $i));
  6.     }
  7.     fclose($fp);

http://screencast.com/t/kGZC8EoG
  #5 (permalink)  
Antiguo 05/05/2014, 09:21
 
Fecha de Ingreso: noviembre-2013
Mensajes: 47
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: fputcsv para guardar en un excell en mas de 1 columna

Pues es muy raro... A mi me lo mete todo en la columna A, mira lo acabo de probar asi (e copiada el for que has puesto en tu ultimo post para probar)

Código PHP:
                        // This include gives us all the WordPress functionality
                        
include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );

                        
/*
                         * Make sure to use some namespacing for your functions:
                         * Mine for this example: "fz_csv_"
                         */
                        
function fz_csv_export() {
                            
// This line gets the WordPress Database Object
                            
global $wpdb;

                            
// Here's the query, split up for easy reading
                            
$qry = array();
                            
$qry[] = "SELECT field_name, field_val";
                            
$qry[] = "FROM wp_cformsdata";
                            
$qry[] = "ORDER BY f_id";

                            
/*
                             * Use the WordPress database object to run the query and get
                             * the results as an associative array
                             */
                            
$result $wpdb->get_results(implode(" "$qry), ARRAY_A);
                            
//page, title, Nombre, Apellidos, Empresa, Telefono, email, Comentarios, Acepto";

                            // Check if any records were returned from the database
                              
if ($wpdb->num_rows 0) {
     
    
$filename "dades.csv";
     
    
header'Content-type: text/csv' );
    
header'Content-Disposition: attachment;filename='.$filename);
     
    
$fp fopen('dades.csv''w');
     
    
$hrow $result[0];
     
    
fputcsv($fp, array('page''title''Nombre''Apellidos''Empresa''Telefono''email''Comentarios''Acepto'));
     
    for(
$i 0$i 10$i++) {
        
fputcsv($fp, array('Nombre' $i'Apellido' $i'Empresa' $i));
    }
     
    
fclose($fp);
     
    }
                            
// This function removes all content from the output buffer
                            
ob_end_clean();

                        }

fz_csv_export() 


Debo tener algo mal...

Etiquetas: bbdd, php
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:11.