Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/12/2011, 16:40
Panga
 
Fecha de Ingreso: noviembre-2011
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 3
Problema creando XLS con PHP

Buenas,

Voy a intentar ser lo mas explicativo posible, si quedan dudas preguntenme. Tengo el siguiente problema.

Estoy creando una mini aplicacion en php, el codigo de la aplicacion mucho no importa, basicamente es un TextArea en un formulario en html, que al enviarlo, saca informacion del texto y la ingresa en una BD, e ingresa un campo que es EL TEXTAREA.

Hasta ahi, todo bien, me inserta en la BD todo correctamente, es mas cuando lo quiero mostrar en html me anda todo de 10, usando el nl2br.

Mi problema viene cuando quiero crear un excel apartir de lo que esta en la BD.
El codigo del excel es:

Excel.php

Código PHP:
<?
$host 
"localhost";
$user "root";
$pass "***";
$db "***";
$connection mysql_connect($host$user$pass) or die ("Unable to connect!"); 
mysql_select_db($db) or die ("Unable to select database!"); 

$sql "
SELECT 
    *
FROM
    ****
WHERE
    status LIKE 'Open'
ORDER BY
    DAY DESC
"
;
 
$r mysql_query$sql ) or trigger_errormysql_error($conn), E_USER_ERROR );
$return '';
if( 
mysql_num_rows($r)>0){
    
$return .= '<table border=1>';
    
$cols 0;
    while(
$rs mysql_fetch_row($r)){    
        
$return .= '<tr>';
        if(
$cols==0){
            
$cols sizeof($rs);
            
$cols_names = array();
            for(
$i=0$i<$cols$i++){
                
$col_name mysql_field_name($r,$i);
                
$return .= '<th><center>'.htmlspecialchars($col_name).'</center></th>';
                
$cols_names[$i] = $col_name;
            }
            
$return .= '</tr><tr>';
        }
        for(
$i=0$i<$cols$i++){
            
#En esta iteración podes manejar de manera personalizada datos, por ejemplo:
            
if($cols_names[$i] == 'fechaAlta'){ #Fromateo el registro en formato Timestamp
                
$return .= '<td>'.htmlspecialchars(date('d/m/Y H:i:s',$rs[$i])).'</td>';
            }else if(
$cols_names[$i] == 'activo'){ #Estado lógico del registro, en vez de 1 o 0 le muestro Si o No.
                
$return .= '<td>'.htmlspecialchars$rs[$i]==1'SI':'NO' ).'</td>';    
            }else if(
$cols_names[$i] == '****'){ 
                
$return .= '<td>'.$rs[$i].'</td>';              
            }else if(
$cols_names[$i] == '****'){
                    
$rs[$i] = subStr($rs[$i], 0, -1);
                    if ( 
$rs[$i] == 'Warning') {
                
$return .= "<td bgcolor='04E4FD'><center>".htmlspecialchars($rs[$i])."</center></td>";    
                    } elseif ( 
$rs[$i] == 'Major') {
                    
$return .= "<td bgcolor='FDA604'><center>".htmlspecialchars($rs[$i])."</center></td>"
                    } elseif ( 
$rs[$i] == 'Critical') {    
                    
$return .= "<td bgcolor='FD0411'>".htmlspecialchars($rs[$i])."</center></td>"
                    } else { 
$return .= '<td><center>'.htmlspecialchars($rs[$i]).'</center></td>';}
            }else{
                
$return .= '<td><center>'.htmlspecialchars($rs[$i]).'</center></td>';
            }
        }
        
$return .= '</tr>';
    }
    
$return .= '</table>';
    
mysql_free_result($r);
}
#Cambiando el content-type más las <table> se pueden exportar formatos como csv
        
header("Pragma: public");
        
header("Expires: 0");
        
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        
header("Content-Type: application/force-download");
        
header("Content-Type: application/octet-stream");
        
header("Content-Type: application/download");;
        
header("Content-Disposition: attachment;filename=Prueba_".date('d-m-Y').".xls");
        
header("Content-Transfer-Encoding: binary ");        
echo 
$return;  

?>
El codigo lo saque de un aporte de esta pagina, y anda de 10. Todo anda bien. El unico problema, es en la celda del Textarea, me lo pone todo en una sola linea, y yo lo quiero que este en formato texto, con paragrafos.

Busque por todos lados y no encontre como hacerlo.

Si alguien me puede dar una mano le agradeceria

Saludos,