Foros del Web » Programando para Internet » PHP »

Formato de celda al exportar a Excel

Estas en el tema de Formato de celda al exportar a Excel en el foro de PHP en Foros del Web. Hola a todos, Estoy exportando datos de una bbdd a un fichero excel, pero tengo un problema que hay un campo que es 'varchar' pero ...
  #1 (permalink)  
Antiguo 21/12/2005, 07:35
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
Formato de celda al exportar a Excel

Hola a todos,

Estoy exportando datos de una bbdd a un fichero excel, pero tengo un problema que hay un campo que es 'varchar' pero cuando aparece en la hoja de cálculo, está con formato científico.

Gracias de antemano.
  #2 (permalink)  
Antiguo 21/12/2005, 07:44
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Como realizas la exportación (codigo)?
  #3 (permalink)  
Antiguo 21/12/2005, 09:24
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
Hola,

lo exporto con header, y es una tabla normal.
  #4 (permalink)  
Antiguo 21/12/2005, 09:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Poné el código que estas usando, por que lo que contas no suele pasar :(
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 21/12/2005, 09:46
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
Esta es la cabecera:

header("Content-type: application/octet-stream");

header("Content-Disposition: attachment; filename=excel.xls");
header("Pragma: no-cache");
header("Expires: 0");

y luego voy rellenando las celdas con los campos, así:

<td align="center"><?php echo $row_consulta_form['apellido1'];?></td>

Gracias.
  #6 (permalink)  
Antiguo 21/12/2005, 09:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Con "header()" sólo compones las cabeceras HTTP para indicar que el dato que vas a enviar a tu cliente (navegador) es de tal formato (en tu caso un .xls) ..

Pero .. esos datos con cierto formato característico como el que requiere Excel para recornocerlo como tal "columnas/filas" .. es el que tu compones "dinámicamente" con PHP y por donde "podrías" tener el problema. También piensa que los datos también intervienen en el problema ... cara a "Excel" .. no le importa si tu campo de tu BD original era un VARCHAR o cualquier otro tipo .. cuando tu compones tu "tabla HTML" para dar ese fomato reconocido por Excel (supongo que lo harás así) .. lo que manda es el própio dato y como lo interprete Excel ..

Por ende .. y por eso, te insistimos tanto en solicitarte el código y .. ayudaría también una muestra de datos que trabajas .. Ahora .. si por A o B motivo no quieres publicar tu código (pese haberlo pedido como 3 o 4 veces ya ..) pues ... poco más se te puede recomendar como comprenderas.

Un saludo,
  #7 (permalink)  
Antiguo 21/12/2005, 09:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por dgcc
Esta es la cabecera:

header("Content-type: application/octet-stream");

header("Content-Disposition: attachment; filename=excel.xls");
header("Pragma: no-cache");
header("Expires: 0");

y luego voy rellenando las celdas con los campos, así:

<td align="center"><?php echo $row_consulta_form['apellido1'];?></td>

Gracias.
¿Realmente cuesta tanto poner todo el código que usas en su contexto? .. Esto no quiere decir que resolvamos el problema si lo vemos todo .. pero por lo menos se puede descartar algo si estamos en las mismas condiciones que tu: tu que ves tu código y lo puedes probar.

Un saludo,
  #8 (permalink)  
Antiguo 21/12/2005, 09:58
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
Lo siento es que me parecia mucho código, pero ahí va, es el código de la tabla:
Código PHP:
<?
header
("Content-type: application/octet-stream");

header("Content-Disposition: attachment; filename=excel_ceim.xls");
header("Pragma: no-cache");
header("Expires: 0");

$query_consulta_form ="SELECT * FROM formulario";

$consulta_form_aux realizar_query($query_consulta_form);
$maxrow=devolver_num_rows($consulta_form_aux);
liberar_result($consulta_form_aux);

$consulta_form realizar_query($query_consulta_form);
?>
<TABLE cellSpacing=3 cellPadding=1 width="100%" border=0>
        <TBODY>
            <TR>
              <TD width=10></TD>
              <TD class=textoNaranjaXXSmall>Listado de Formularios</TD>
             </TR></TBODY>
      </TABLE>
<TABLE cellSpacing=3 cellPadding=1 width="100%" border=0>
    <TBODY>
        <TR></TR>
        <TR></TR>
        <TR></TR>
        <TR></TR>
        <TR></TR>
    </TBODY>
</TABLE>
<table border="1" align=center cellPadding=1 cellSpacing=0 borderColor=#a1aeb6 rules=all  id=TablaClientes style="BORDER-RIGHT: #a1aeb6 1px solid; BORDER-TOP: #a1aeb6 1px solid; FONT-SIZE: 11px; BORDER-LEFT: #a1aeb6 1px solid; WIDTH: 4000px; BORDER-BOTTOM: #a1aeb6 1px solid; FONT-FAMILY: verdana; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #d2d1d2">
  <tr class=textoAzulXXSmall style="BORDER-RIGHT: #a1aeb6 1px solid; BORDER-TOP: #a1aeb6 1px solid; FONT-WEIGHT: bold; BORDER-LEFT: #a1aeb6 1px solid; COLOR: black; BORDER-BOTTOM: #a1aeb6 1px solid; HEIGHT: 20px; BACKGROUND-COLOR: #f3f4f6" align=middle>
    <td width="100">Apellido 1</td>
    <td width="100">Apellido 2</td>
    <td width="100">Nombre</td>
    <td>Dirección</td>
    <td>Nº</td>
    <td>Letra</td>
    <td>Población</td>
    <td>Código Postal</td>
    <td>Correo</td>
    <td>NIF</td>
    <td>NIE</td>
    <td>SS</td>
    <td>Fecha Nacimiento</td>
    <td>Sexo</td>
    <td>Estudios</td>
    <td>Área</td>
    <td>Categoria</td>
    <td>Colectivo</td>
    <td>Piso</td>
    <td>Escalera</td>
    <td>Provincia</td>
    <td>Teléfono</td>
    <td>Edad</td>
    <td>Discapacidad</td>
    <td>Curso 1</td>
    <td>Grupo 1</td>
    <td>Curso 2</td>
    <td>Grupo 2</td>
    <td>Curso 3</td>
    <td>Grupo 3</td>
    <td>Curso 4</td>
    <td>Grupo 5</td>
    <td>Empresa</td>
    <td>CIF</td>
    <td>Domicilio</td>
    <td>Código Postal</td>
    <td>Provincia</td>
    <td>Teléfono</td>
    <td>SS</td>
    <td>Sector</td>
    <td>Localidad</td>
    <td>Pyme</td>
    <td>Fax</td>
    <td>Convenio</td>
    <td>Otros Cursos</td>
    <td>Cuales</td>
    <td>Tamaño Empresa</td>
    <td>Tres Años</td>
    <td>Expediente</td>
    <td>Situaciones</td>
    <td>Innovación</td>
    <td>Reorganización</td>
    <td>Situaciones Vd</td>
    <td>Año</td>
    <td>Fecha</td>
    <td>Boletín</td>
    <td>Anexo 2</td>
    <td>DNI</td>
    <td>Nómina</td>
    <td>Examen</td>
    <td>f_a</td>
    <td>Observaciones</td>
  </tr>
  <?php   $i=1
        while (
$row_consulta_form realizar_fetch_array($consulta_form)){ 
            if (
$i%2==0){
                
?>
                    <TR class=fondoFormularioGris style="BORDER-RIGHT: #fca603 1px solid; BORDER-TOP: #fca603 1px solid; BORDER-LEFT: #fca603 1px solid; COLOR: black; BORDER-BOTTOM: #fca603 1px solid; BACKGROUND-COLOR: #f3f4f6">
                <?
            
}
            else {
                
?>
                    <tr class=textoGrisOscuroXXSmall style="BORDER-RIGHT: #fca603 1px solid; BORDER-TOP: #fca603 1px solid; BORDER-LEFT: #fca603 1px solid; COLOR: black; BORDER-BOTTOM: #fca603 1px solid">
                <?
            
}
            
?>
            
    <td align="center"><?php echo $row_consulta_form['apellido1'];?></td>
    <td align="center"><?php echo $row_consulta_form['apellido2']; ?></td>
    <td align="center"><?php echo $row_consulta_form['nombre']; ?></td>
    <td align="center"><?php echo $row_consulta_form['direccion']; ?></td>
    <td align="center"><?php echo $row_consulta_form['num']; ?></td>
    <td align="center"><?php echo $row_consulta_form['letra']; ?></td>
    <td align="center"><?php echo $row_consulta_form['poblacion']; ?></td>
    <td align="center"><?php echo $row_consulta_form['cp']; ?></td>
    <td align="center"><?php echo $row_consulta_form['correo']; ?></td>
    <td align="center"><?php echo $row_consulta_form['nif']; ?></td>
    <td align="center"><?php echo $row_consulta_form['nie']; ?></td>
    <td align="center"><?php echo sprintf($row_consulta_form['seg_social']); ?></td>
    <td align="center"><?php echo $row_consulta_form['fecha_nacim']; ?></td>
    <? if ($row_consulta_form['sexo']==1){    ?><td align="center">Hombre</td><?    } else { ?><td align="center">Mujer</td><? ?>
    <td align="center"><?php echo $row_consulta_form['estudios']; ?></td>
    <td align="center"><?php echo $row_consulta_form['area']; ?></td>
    <td align="center"><?php echo $row_consulta_form['categoria']; ?></td>
    <td align="center"><?php echo $row_consulta_form['colectivo']; ?></td>
    <td align="center"><?php echo $row_consulta_form['piso']; ?></td>
    <td align="center"><?php echo $row_consulta_form['escalera']; ?></td>
    <td align="center"><?php echo $row_consulta_form['provincia']; ?></td>
    <td align="center"><?php echo $row_consulta_form['telefono']; ?></td>
    <td align="center"><?php echo $row_consulta_form['edad']; ?></td>
    <? if ($row_consulta_form['discapacidad']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <td align="center"><?php echo $row_consulta_form['curso1']; ?></td>
    <td align="center"><?php echo $row_consulta_form['grupo1']; ?></td>
    <td align="center"><?php echo $row_consulta_form['curso2']; ?></td>
    <td align="center"><?php echo $row_consulta_form['grupo2']; ?></td>
    <td align="center"><?php echo $row_consulta_form['curso3']; ?></td>
    <td align="center"><?php echo $row_consulta_form['grupo3']; ?></td>
    <td align="center"><?php echo $row_consulta_form['curso4']; ?></td>
    <td align="center"><?php echo $row_consulta_form['grupo4']; ?></td>
    <td align="center"><?php echo $row_consulta_form['nombre_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['cif_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['domicilio_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['cp_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['provincia_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['telefono_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['seg_social_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['sector_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['localidad_empresa']; ?></td>
    <? if ($row_consulta_form['pyme_empresa']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <td align="center"><?php echo $row_consulta_form['fax_empresa']; ?></td>
    <td align="center"><?php echo $row_consulta_form['convenio_empresa']; ?></td>
    <? if ($row_consulta_form['comp_otros_cursos']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <td align="center"><?php echo $row_consulta_form['comp_cuales']; ?></td>
    <td align="center"><?php echo $row_consulta_form['comp_tamanio']; ?></td>
    <? if ($row_consulta_form['comp_tres_anios']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <? if ($row_consulta_form['comp_expediente']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <td align="center"><?php echo $row_consulta_form['comp_situaciones']; ?></td>
    <? if ($row_consulta_form['comp_innovacion']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <? if ($row_consulta_form['comp_reorganizacion']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <td align="center"><?php echo $row_consulta_form['comp_situaciones_vd']; ?></td>
    <td align="center"><?php echo $row_consulta_form['comp_anio']; ?></td>
    <td align="center"><?php echo $row_consulta_form['fecha']; ?></td>
    <? if ($row_consulta_form['boletin_de_inscripcion']==1){?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <? if ($row_consulta_form['anexo_2']==1){?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <? if ($row_consulta_form['dni']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <? if ($row_consulta_form['nomina']==1){    ?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <? if ($row_consulta_form['examen']==1){?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <? if ($row_consulta_form['f_a']==1){?><td align="center">Sí</td><?    } else { ?><td align="center">No</td><? ?>
    <td align="center"><?php echo $row_consulta_form['observaciones']; ?></td>
  </tr>
  <?php $i=$i+1
  } 
  
?>
</table>

Última edición por Cluster; 21/12/2005 a las 10:04
  #9 (permalink)  
Antiguo 21/12/2005, 10:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si, podría ser mucho código .. pero para eso el foro te presta herramientas como el botón "PHP" para que el código quede coloreado (de mejor lectura) como lo ves ahora (despues que edité tu mensaje ..).

En caso de que el código que expongas no te entre en un mensaje .. puedes usar vários (respondiendote) y también puedes dejar el link por aquí del código (pasalo a .phps o .txt para verlo) subiendo tus archivos a cualquier servidor tuyo.

Un saludo,
  #10 (permalink)  
Antiguo 21/12/2005, 10:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok, ya tenemos el código .. ahora falta que -especifiques- que "campo" de ese montón que componen tu hoja de calculo (planilla) es el que dá el problema. Y como ya te comenté . .no está de más que nos indiques una muestra de que valores toma ese campo que dá esos problemas!.

Un saludo,
  #11 (permalink)  
Antiguo 21/12/2005, 10:10
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
Gracias,

pero no había escrito mucho en el foro, para la próxima vez ya lo sé.
  #12 (permalink)  
Antiguo 21/12/2005, 10:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por cierto .. has probado a obtener por "pantalla" esa información (sin usar las cabeceras HTTP) para ver si los datos que obtienes de tu BD son los correctos y como se presentan estos?.

Otra cosa .. viendo como queda ese montón de HTML .. se vé al final la columna "observaciones" ... bajo esta una série de campos con valores "si" "no" "si" "no" .. Bueno, el caso es que los campos (o celdas) superiores a estos "si" "no" están "Combinados" (unidos) .. Eso no sé como lo "tratará" Excel .. en principio si usas este método deberías entregar una tabla HTML de completa .. sin "Combinar" celdas. .. Revisalo.

Un saludo,
  #13 (permalink)  
Antiguo 21/12/2005, 10:17
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
Perdón,

El campo es '$row_consulta_form['seg_social']', y sí, probé a generarlo sin cabeceras y funciona bien, lo que he probado es que el campo tiene 12 caracteres, y ahí está el problema, pues si pongo 11 lo genera perfectamente.

Gracias otra vez.
  #14 (permalink)  
Antiguo 21/12/2005, 11:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por dgcc
Perdón,

El campo es '$row_consulta_form['seg_social']', y sí, probé a generarlo sin cabeceras y funciona bien, lo que he probado es que el campo tiene 12 caracteres, y ahí está el problema, pues si pongo 11 lo genera perfectamente.

Gracias otra vez.
Pero .. exactamente que te sale en Excel cuando se supera dicho tamaño, es algo tipo:

##########

Es eso?

Tu aplicas alguna macro o formato al tomar esos datos en Excel?
La Celda/columna que te dá problemas .. que tipo de dato es esa celda/columna?

Un saludo,
  #15 (permalink)  
Antiguo 21/12/2005, 11:09
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
El campo es varchar y el resultado en excel, aparece así:

2,80375E+11

y el valor de la bbdd es: 280374946218
  #16 (permalink)  
Antiguo 21/12/2005, 11:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues eso es de lo más normal ... En Excel si el campo de la celda en cuestión es de tipo "General" .. como así sale por defecto si tu no lo especificas, cosa que en tu generación de tu ".xls" como veras por ningún sitio le das algún formato o propiedad a las celdas .. así lo veras.

Si tu vas a esa celda/columna y cambias el tipo de "Formato" -> "Celdas" -> "Formato de celda" -> "Número" -> (de General a Número) .. veras el dato correctamente.

--------------------------

Excel ... tiene su própio formato de definición de datos, su própia forma de indicar no sólo algo básico como en que celda va a parar el dato sino por ejemplo el formato de la celda (colores .. etc) .. el tipo de dato de la celda (General, número, texto .. cierto formato...), etc.

Ese "formato" se controla en "binario" principalmente y con sus códigos própios (que desconozco, parece que le llaman "BIFF" o algo así).

Revisa en www.phpclasses.org alguna classe que trabaje de esta forma. Ojo por qué hay muchas que usan COM para no complicarse y generar .xls .. estos no funcionan en PHP bajo Linux ´(sólo con PHP corriendo en Windows y que tengan instalado MS Office en ellos)

Un saludo,

PD: te dás cuenta lo importante que es aportar suficientes datos sobre tu problema para que nos entendamos y te demos alguna solución más rápido? .. Tomalo en cuenta para otras veces.
  #17 (permalink)  
Antiguo 21/12/2005, 11:58
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Aportando a lo que dice cluster, una vez me paso, pero como eran de esos trabajos "rápidos", donde no se requiere gran complicación, decidi anteponerle un string al numero, y así excel me lo respeto: EJ: <td>ID 7898798798798798797</td>

Si luego tengo tiempo veré este tema que me intereso y si consigo alguna ayuda mas la aportare.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #18 (permalink)  
Antiguo 21/12/2005, 12:21
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
<td>&nbsp;280374946218280374946218</td>
Te quedará con un espacio delante, pero es lo mejor que pude ver...si alguien sabe de algo mejor que lo largue ;)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #19 (permalink)  
Antiguo 21/12/2005, 13:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Encontré esta completa classe (juego de classes en realidad .. son unas cuantas relacionadas) para generar .xls bastante complejos.

http://www.bettina-attack.de/jonny/v...hp_writeexcel/

No la he probado .. pero realmente parece muy buena, por lo menos se ven bien los Demos que hay publicados.

Un saludo,
  #20 (permalink)  
Antiguo 22/12/2005, 03:48
 
Fecha de Ingreso: agosto-2004
Mensajes: 83
Antigüedad: 19 años, 8 meses
Puntos: 0
Muchas gracias a los dos,

probaré la clase Cluster, y si no hay problema con el excel pondré un espacio delante como me dice Nicolaspar.

Lo dicho y muchas gracias.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 02:10.