Foros del Web » Programando para Internet » PHP »

crear archivo XLS

Estas en el tema de crear archivo XLS en el foro de PHP en Foros del Web. Holoa Amig@s, cree la siguiente funcion para crear archivos xls, despues de hacer la consulta en la db: Código PHP: function  createExcel ( $filename ,  ...
  #1 (permalink)  
Antiguo 02/07/2009, 09:59
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 15 años, 2 meses
Puntos: 3
crear archivo XLS

Holoa Amig@s, cree la siguiente funcion para crear archivos xls, despues de hacer la consulta en la db:
Código PHP:
function createExcel($filename$arrydata) {
    
$excelfile $filename;  
    
$fp fopen($excelfile"wb");  
    if (!
is_resource($fp)) {  
        die(
"Error al crear $excelfile");  
    }  
    
fwrite($fpserialize($arrydata));  
    
fclose($fp);
    
header ("Expires: Mon, 3 Jun 2009 05:00:00 GMT");  
    
header ("Last-Modified: " gmdate("D,d M YH:i:s") . " GMT");  
    
header ("Cache-Control: no-cache, must-revalidate");  
    
header ("Pragma: no-cache");  
    
header ("Content-type: application/x-msexcel");  
    
header ("Content-Disposition: attachment; filename=\"" $filename "\"" );
    
readfile($excelfile);  

y esta es la consulta que tiene que guardar en el archivo xls:
Código PHP:
$query "SELECT *, ((semana1 + semana2 + semana3 + semana4)/4) AS total FROM $nomb ORDER BY total DESC ";
$result mysql_query($query);
while (
$row = @mysql_fetch_array($result)) {
    
extract ($row);
        echo 
"<tr><td>$nombre</td><td align='right'>$total</td></tr>";
    
$data[] = $row;//Ingresa los datos al xls
}
createExcel("excel-mysql.xls"$data);//Crea el archivo XLS
exit;
mysql_close($con); 
Pero lo que hace es cuardar en 1 casilla todos los datos de la consulta, aparte cuando abro el archivo xls me sale un error que dice: el archivo tiene otro formato que el especificado por la extension del archivo.
Please, alguien que comprenda el error o que sepa alguna forma mas facil de crear un xls con el codigo que tengo
  #2 (permalink)  
Antiguo 02/07/2009, 10:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: crear archivo XLS

estas serializando los datos ...

no uses serialize() si no sabes lo que haces...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 02/07/2009, 10:15
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: crear archivo XLS

si retiro serialize() me sale escrito Array y nada mas
  #4 (permalink)  
Antiguo 02/07/2009, 10:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: crear archivo XLS

mmm... si sabes lo que estas haciendo o no???

$data es un array() que tiene lineas de HTML, supongo que eso necesitas....


¿que te parece utilizar join()???
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 02/07/2009, 10:31
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: crear archivo XLS

Como tu mismo lo dices $data es un array(), si pongo join() me saldra todos los datos en la misma casilla pero en lugar del nombre que coresponde, pondra Array en todos; lo que yo creo que esta mal es el formato ya que por eso me sale el mensaje de error al abrir el documento con exel 2007, pero no se como cambiar o poner el formato correspondiente ya que la extension en este caso no designa el formato
  #6 (permalink)  
Antiguo 02/07/2009, 10:36
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: crear archivo XLS

los datos me salen de esta forma:
Código 1:
Ver original
  1. a:274:{i:0;a:12:{i:0;s:22:"Trojan.Win32.Qhost.ljy";s:6:"nombre";s:22:"Trojan.Win32.Qhost.ljy";i:1;s:7:"66.8249";s:7:"semana1";s:7:"66.8249";i:2;s:1:"0";s:7:"semana2";s:1:"0";i:3;s:1:"0";s:7:"semana3";s:1:"0";i:4;s:1:"0";s:7:"semana4";s:1:"0";i:5;s:9:"16.706225";s:5:"total";s:9:"16.706225";}i:1;a:12:{i:0;s:25:"HEUR:Trojan.Win32.Generic";s:6:"nombre";s:25:"HEUR:Trojan.Win32.Generic";i:1;s:6:"2.0859";s:7:"semana1";s:6:"2.0859";i:2;s:6:"14.938";s:7:"semana2";s:6:"14.938";i:3;s:7:"13.0797";s:7:"semana3";s:7:"13.0797";i:4;s:6:"7.6733";s:7:"semana4";s:6:"7.6733";i:5;s:8:"9.444225";s:5:"total";s:8:"9.444225";}i:2;a:12:{i:0;s:23:"HEUR:Worm.Win32.Generic";s:6:"nombre";s:23:"HEUR:Worm.Win32.Generic";i:1;s:6:"0.0625";s:7:"semana1";s:6:"0.0625";i:2;s:1:"0";s:7:"semana2";s:1:"0";i:3;s:6:"1.2436";s:7:"semana3";s:6:"1.2436";i:4;s:7:"29.9347";s:7:"semana4";s:7:"29.9347";i:5;s:6:"7.8102";s:5:"total";s:6:"7.8102";}i:3;a:12:{i:0;s:32:"not
  #7 (permalink)  
Antiguo 02/07/2009, 10:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: crear archivo XLS

mmm.... y si en lugar de guardar en $data la variable $row ...

guardas la cadena de HTML???

y luego usas join() para pegar todo en una gran cadena...

o bien, si usas Google?

PHPExcel


--
osea, no se de donde sacas que así es la forma de hacerlo.... serializando, ¿donde viste eso??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 02/07/2009, 11:02
 
Fecha de Ingreso: enero-2009
Ubicación: en la casa
Mensajes: 223
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: crear archivo XLS

de esta forma y colocando join()
Código PHP:
$data[] = $nombre." ".$total
consegui esto
Código 2:
Ver original
  1. Trojan.Win32.Qhost.ljy 16.706225HEUR:Trojan.Win32.Generic 9.444225HEUR:Worm.Win32.Generic 7.8102not-a-virus:AdWare.Win32.MyWay.j 5.624075Trojan-Dropper.Win32.Wlord.nw 4.679425HEUR:Trojan-Downloader.Win32.Generic 3.208675HEUR:Virus.Win32.Generic 2.827275Trojan.Win32.Qhost.lkn 1.775225Heur.Win32.Trojan.Generic 1.766775Backdoor.Win32.IRCBot.ika 1.611925HEUR:Trojan.Win32.Invader 1.5043Trojan-Dropper.Win32.Agent.amrw 1.39675P2P-Worm.Win32.Palevo.ddn 1.250225
como puedo hacer para que reconosca casa casilla y para que inicie nueva fila?
  #9 (permalink)  
Antiguo 02/07/2009, 11:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: crear archivo XLS

Cita:
Iniciado por diego007007 Ver Mensaje
[...] como puedo hacer para que reconosca casa casilla y para que inicie nueva fila?
estas haciéndolo sin saber el formato de excel... o si lo sabes??

una cosa es que lo intentes, y otra es que te asegures de hacerlo bien....

si notaste el enlace de PHPExcel ???

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 02/07/2009, 12:06
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Respuesta: crear archivo XLS

Hola, por ahi te sirve de ayuda este script que saque del foro ....

Código php:
Ver original
  1. <?php
  2. /*Mysql To Excel
  3. Generación de excel versión 1.0
  4. Nicolás Pardo - 2007
  5. */
  6. #Conexion a la db
  7. require_once('conexion.php');
  8.  
  9. #Sql, acá pone tu consulta a la tabla que necesites exportar filtrando los datos que creas necesarios.
  10. $sql = "SELECT * FROM clientes ORDER BY razon_soc ASC";
  11.  
  12. $r = mysql_query( $sql ) or trigger_error( mysql_error($conn), E_USER_ERROR );
  13. $return = '';
  14. if( mysql_num_rows($r)>0){
  15.     $return .= '<table border=1>';
  16.     $cols = 0;
  17.     while($rs = mysql_fetch_row($r)){
  18.         $return .= '<tr>';
  19.         if($cols==0){
  20.             $cols = sizeof($rs);
  21.             $cols_names = array();
  22.             for($i=0; $i<$cols; $i++){
  23.                 $col_name = mysql_field_name($r,$i);
  24.                 $return .= '<th>'.htmlspecialchars($col_name).'</th>';
  25.                 $cols_names[$i] = $col_name;
  26.             }
  27.             $return .= '</tr><tr>';
  28.         }
  29.         for($i=0; $i<$cols; $i++){
  30.             #En esta iteración podes manejar de manera personalizada datos, por ejemplo:
  31.            if($cols_names[$i] == 'fechaAlta'){ #Fromateo el registro en formato Timestamp
  32.                $return .= '<td>'.htmlspecialchars(date('d/m/Y H:i:s',$rs[$i])).'</td>';
  33.             }else if($cols_names[$i] == 'activo'){ #Estado lógico del registro, en vez de 1 o 0 le muestro Si o No.
  34.                $return .= '<td>'.htmlspecialchars( $rs[$i]==1? 'SI':'NO' ).'</td>';
  35.             }else{
  36.                 $return .= '<td>'.htmlspecialchars($rs[$i]).'</td>';
  37.             }
  38.         }
  39.         $return .= '</tr>';
  40.     }
  41.     $return .= '</table>';
  42. }
  43. #Cambiando el content-type más las <table> se pueden exportar formatos como csv
  44. header("Content-type: application/vnd-ms-excel; charset=iso-8859-1");
  45. header("Content-Disposition: attachment; filename=NombreDelExcel_".date('d-m-Y').".xls");
  46. echo $return;  
  47. ?>

Saludos, Ricardo !!!
__________________
Mail: [email protected]
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 11:15.