Foros del Web » Programando para Internet » PHP »

Numero no se escribe correctamente en excel.

Estas en el tema de Numero no se escribe correctamente en excel. en el foro de PHP en Foros del Web. Buenas Estimada Comunidad. Trabajo con una libreria que es la de PHPExcel, y cuando escribo el dato en un archivo excel, la mayoria de los ...
  #1 (permalink)  
Antiguo 31/05/2011, 16:03
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Numero no se escribe correctamente en excel.

Buenas Estimada Comunidad.

Trabajo con una libreria que es la de PHPExcel, y cuando escribo el dato en un archivo excel, la mayoria de los datos se escriben correctamente, pero me sucede de que tengo un numero, el cual es un imei de un aparato celular, y ustedes sabran que el imei es bastante largo.

El problema es que de todos los datos, los imei son los que me estan dando problemas, ya que el numero escrito en el archivo excel no es correcto, porque el ultimo numero de un imei que es:

354907047764673 --> me escribe el N° 354907047764670

Si se dan cuenta, el ultimo digito me lo cambia de 3 a 0, y eso no puede ser. Ahora como dato anexo, en la base de datos, el numero no se almacena como INT, sino que se almacena como VARCHAR con un largo de 20.

La verdad nose que es lo que puede ser; en lagunas ocasiones llegue a pensar de que solo era por cuestiones de memoria, pero hice limpieza de la memoria, y elimine variables que ya no utlizaba, pero aun asi me produce este error.

Aqui les dejo el codigo
Código PHP:
<?php
error_reporting
(E_ALL);

date_default_timezone_set('Europe/London');

require_once 
'../classes/PHPExcel.php';
require_once 
'consultauri.php';

$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("Uri Rodriguez")
                             ->
setLastModifiedBy("Uri Rodriguez")
                             ->
setTitle("Documento de Prueba para formato de documento")
                             ->
setSubject("Documento de Prueba para formato de documento");

$letras = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",);
$letras2 = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",);
$contador_columnas count($fas_resultados[0]);
for (
$i=0$i<$contador_columnas$i++)
{
  list(
$k$valor)=each($fas_resultados[0]); //metodo utilizado solo para obtener los valores de los indices
  //del arreglo asociativo
  //echo 'la i es:'.$i.'//';
  
if ($i 26)
  {
    
$objPHPExcel->setActiveSheetIndex()
                ->
setCellValue($letras[$i].'2'ucwords(strtolower($k)));
  }
  else if ((
$i >= 26) && ($i 52))
  {
    
$i $i 26;
    
$objPHPExcel->setActiveSheetIndex()
                ->
setCellValue($letras2[0].$letras[$i].'2'ucwords(strtolower($k)));
    
$i $i 26;
  }
  else if ((
$i >= 52) && ($i 78))
  {
    
$i $i 52;
    
$objPHPExcel->setActiveSheetIndex()
                ->
setCellValue($letras2[1].$letras[$i].'2'ucwords(strtolower($k)));
    
$i $i 52;
  }
  else if (
$i >= 78)
  {
    
$i $i 78;
    
$objPHPExcel->setActiveSheetIndex()
                ->
setCellValue($letras2[2].$letras[$i].'2'ucwords(strtolower($k)));
    
$i $i 78;
  }
}
$i $i 1;
for (
$p=0$p<$i$p++)
{
  if (
$p 26)
  {
    
$objPHPExcel->getActiveSheet()->getStyle('A2:'.$letras[$p].'2')->getBorders()->getAllBorders()
            ->
setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  }
  else if ((
$p >= 26) && ($p 52))
  {
    
$p $p 26;
    
$objPHPExcel->getActiveSheet()->getStyle('A2:'.$letras2[0].$letras[$p].'2')->getBorders()->getAllBorders()
            ->
setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
$p $p 26;
  }
  else if ((
$p >= 52) && ($p 78))
  {
    
$p $p 52;
    
$objPHPExcel->getActiveSheet()->getStyle('A2:'.$letras2[1].$letras[$p].'2')->getBorders()->getAllBorders()
            ->
setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
$p $p 52;
  }
  else if (
$p >= 78)
  {
    
$p $p 78;
    
$objPHPExcel->getActiveSheet()->getStyle('A2:'.$letras2[2].$letras[$p].'2')->getBorders()->getAllBorders()
            ->
setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
$p $p 78;
  }
}
$columnas_excel = array("numero fono"=>0,
                       
"descripcion marca"=>0,
                       
"descripcion modelo"=>0,
                       
"imei"=>0,
                       
"pin"=>0,
                       
"estado celular"=>0,
                       
"compania celular"=>0);

while (list(
$posicion1$valor4)=each($columnas_excel))
{
  if (
$posicion1 == "numero fono")
  {
    
$objPHPExcel->getActiveSheet()->getStyle($letras2[0].'3:'.$letras2[0].'1000')->getNumberFormat()
                ->
setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
  }
  if (
$posicion1 == "descripcion marca")
  {
    
$objPHPExcel->getActiveSheet()->getStyle($letras2[1].'3:'.$letras2[1].'1000')->getNumberFormat()
                ->
setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  }
  if (
$posicion1 == "descripcion modelo")
  {
    
$objPHPExcel->getActiveSheet()->getStyle($letras2[2].'3:'.$letras2[2].'1000')->getNumberFormat()
                ->
setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  }
  if (
$posicion1 == "imei")
  {
    
$objPHPExcel->getActiveSheet()->getStyle($letras2[3].'3:'.$letras2[3].'1000')->getNumberFormat()
                ->
setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
  }
  if (
$posicion1 == "pin")
  {
    
$objPHPExcel->getActiveSheet()->getStyle($letras2[4].'3:'.$letras2[4].'1000')->getNumberFormat()
                ->
setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  }
  if (
$posicion1 == "estado celular")
  {
    
$objPHPExcel->getActiveSheet()->getStyle($letras2[5].'3:'.$letras2[5].'1000')->getNumberFormat()
                ->
setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  }
  if (
$posicion1 == "compania celular")
  {
    
$objPHPExcel->getActiveSheet()->getStyle($letras2[6].'3:'.$letras2[6].'1000')->getNumberFormat()
                ->
setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
  }
}


$numFila2 $numFilas 3;
while (list(
$l$valor2)=each($fas_resultados[1]))
{
  
$posicion_dato[]=$l;
}
for (
$i=0$j=3$i<$numFilas$j<$numFila2$i++, $j++)
{
  for (
$columnas=0$p_dato=0$columnas<$contador_columnas$p_dato<$contador_columnas$columnas++, $p_dato++)
  {
    if(
$columnas 26)
    {
      
$coordenadas $letras[$columnas].$j;
    }
    else if ((
$columnas >= 26) && ($columnas 52))
    {
      
$columnas $columnas 26;
      
$coordenadas $letras2[0].$letras[$columnas].$j;
      
$columnas $columnas 26;
    }
    else if ((
$columnas >=52) && ($columnas <78))
    {
      
$columnas $columnas 52;
      
$coordenadas $letras2[1].$letras[$columnas].$j;
      
$columnas $columnas 52;
    }
    else if (
$columnas >= 78)
    {
      
$columnas $columnas 78;
      
$coordenadas $letras2[2].$letras[$columnas].$j;
      
$columnas $columnas 78;
    }
    
$objPHPExcel->setActiveSheetIndex()
                ->
setCellValue($coordenadas$fas_resultados[$i][$posicion_dato[$p_dato]]);
      
//$objPHPExcel->getActiveSheet()->getStyle('A'.$j.':F'.$j)->getBorders()->getAllBorders()
              //->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  
}
}
unset(
$i);
unset(
$j);
unset(
$l);
unset(
$p_dato);
unset(
$columnas);
unset(
$contador_columnas);
unset(
$numFila2);
//unset($numFilas);
unset($posicion_dato);
unset(
$valor2);
unset(
$letras);
//unset($letras2);


$indicador = -1;

$objPHPExcel->getActiveSheet()->setTitle('Uris');
$objPHPExcel->getActiveSheet()->setShowGridlines(false);


$objPHPExcel->setActiveSheetIndex(0);


// Save Excel 2007 file
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel2007');
$objWriter->save(str_replace('.php''.xlsx'__FILE__));

?>
Tuve que acortar un poco el codigo, porque estaba documentado y porque estuve buscando varias opciones para poder reparar el problema. Si tiene cualquier consulta no duden en realizarla.

Aclaro tambien de que los datos al moemtno de obtenerlos de la base de datos y hasta el moento antes de escribirlos en el archivo excel, se enceuntran correctamente, pero despues de la escritura en el documento, me jode el ultmo digito.

Muchas Gracias por leer el motivo de mi proxima calvicie.
  #2 (permalink)  
Antiguo 31/05/2011, 16:21
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 3 meses
Puntos: 155
Respuesta: Numero no se escribe correctamente en excel.

puedes comentarizar donde es donde asignas el numero ?

que pasa si imprimes a web ese valor antes de escribirlo en excel?
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo

Etiquetas: correctamente, excel, numero
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 09:56.