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.