PHP - formato al exportar a Excel una cadena de números

   
Vista:
Imágen de perfil de siREZ

formato al exportar a Excel una cadena de números

Publicado por siREZ (201 intervenciones) el 10/12/2013 03:48:21
Cordial Saludo.

tengo una tabla en la BBDD con una columna definida como vchar(20), allí almaceno el código del médico.
este código, (casi todos, 60% aprox) comienzan por 0 (cero) ejem 050010001601

pero al exportarlo a Excel me elimina el cero inicial, excel lo reconoce como un número y al tratar de recuperar este 0 no es posible

como puedo variar el script para evitar que me exporte una columna vchar como numero?
para que al exportarlo a Excel lo reconozca como un texto?

el código es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
 
include "../Connections/myconexion.php";
mysql_connect ($hostname_myconexion, $username_myconexion, $password_myconexion);
mysql_select_db($database_myconexion) or die("No se puede seleccionar la base de datos.......... ");
 
$fecha_hoy=date('d-m-Y');
$datos = "<br> Medicos con email  <br><br> Fecha del presente Informe: ".$fecha_hoy."<br> <br> ";
 
$sql = "SELECT * FROM listado_de_medicos  ORDER BY email DESC ";
$r = mysql_query( $sql ) or trigger_error( mysql_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 = ucwords(mysql_field_name($r,$i));
                $return .= '<th>'.htmlspecialchars($col_name).'</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{
                $return .= '<td>'.htmlspecialchars($rs[$i]).'</td>';
            }
        }
        $return .= '</tr>';
    }
    $return .= '</table>';
    mysql_free_result($r);
}
#Cambiando el content-type más las <table> se pueden exportar formatos como csv
header("Content-type: application/vnd-ms-excel; charset=iso-8859-1");
header("Content-Disposition: attachment; filename=medicos-".date('d-m-Y').".xls");
echo $datos;
echo $return;
?>



gracias.

siREZ
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

formato al exportar a Excel una cadena de números

Publicado por xve (5522 intervenciones) el 10/12/2013 08:00:28
Hola sIREZ, al exportar el valor, ponle delante un apostrofe... por ejemplo:
1
'0256

De esta manera, te lo cogerá como una cadena.

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Roberto

formato al exportar a Excel una cadena de números

Publicado por Roberto (201 intervenciones) el 10/12/2013 12:40:54
hola,

el apostrofe iría aquí:

1
2
3
4
5
6
7
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{
                $return .= '<td>'.htmlspecialchars($rs[$i]).'</td>';
            }

en mi caso particular, todos los campos son vchar.}

como sería?

gracias


siREZ
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

formato al exportar a Excel una cadena de números

Publicado por xve (5522 intervenciones) el 10/12/2013 13:00:39
Hola Roberto, si por ejemplo, $rs[$i] contiene el valor, tu lo tienes así:
1
$return .= '<td>'.htmlspecialchars($rs[$i]).'</td>';
y yo lo pondría así:
1
$return .= "<td>'".htmlspecialchars($rs[$i])."</td>";

Fíjate en la comilla simple al final del <td>...

Coméntanos si te funciono, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de siREZ

formato al exportar a Excel una cadena de números

Publicado por siREZ (201 intervenciones) el 10/12/2013 16:02:32
gracias xve

funciona perfecto!

1
2
3
4
5
6
7
8
9
10
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{
                $return .= "<td>'".htmlspecialchars($rs[$i])."</td>";
            }
        }


siREZ
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

formato al exportar a Excel una cadena de números

Publicado por xve (5522 intervenciones) el 10/12/2013 19:48:27
Gracias por comentarlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar