Foros del Web » Programando para Internet » PHP »

Cambiar formato de celda PHPExcel (No estilo)

Estas en el tema de Cambiar formato de celda PHPExcel (No estilo) en el foro de PHP en Foros del Web. Aca en FDW hay varios temas relacionados a Cambiar formato de celda PHPExcel, pero se refieren a formato, mas que todo a la parte del ...
  #1 (permalink)  
Antiguo 07/04/2017, 10:50
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Cambiar formato de celda PHPExcel (No estilo)

Aca en FDW hay varios temas relacionados a Cambiar formato de celda PHPExcel, pero se refieren a formato, mas que todo a la parte del estilo.

Yo recupero de la DB un numero asi 000000281 pero al exportarlo a XLS con PHPExcel, me sale solo el 281

Busque en varios temas relacionados
https://es.scribd.com/doc/109377177/...-de-Desarrollo
http://www.cmsws.com/examples/applic...berFormat.html Este ultimo que me parece uno de los mas completos, cambia a varios tipos de formato de celda pero si le coloco el FORMAT_TEXT igual me muestra solo 281 habra alguna forma de darle formato texto ??

Otra cosa, para poder dar formatos a rangos se hace asi
Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()->getStyle('A3:J3')->applyFromArray($estiloTituloColumnas);
Pero eso es en horizontal de la A a la J, pero que pasa si yo quiero dar un X formato a una columna ??
Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()->getStyle('B4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
En el codigo anterior se le da el formato con dos decimales (.00) a la celda B4, que pasa si yo quiero que desde la celda B4 hasta donde lleguen las diferentes lineas del reporte, esa columna B tenga ese formato (.00) ??
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #2 (permalink)  
Antiguo 07/04/2017, 11:25
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: Cambiar formato de celda PHPExcel (No estilo)

KATHYU, yo uso PHPExcel y la forma en que completo las filas es iterando por la colección obtenida desde la BD, es decir "pintando fila a fila (celda x celda)". Te quiero decir que en cada ciclo pues le aplicarías formato a las celdas de la fila.

Código PHP:
$inicioFilasFactoresRiesgos 7;
            foreach (
$factoresRiesgosParaExcel as $factorRiesgo)
            {
                
$phpExcelObject->getActiveSheet()->setCellValue("A" $inicioFilasFactoresRiesgos$factorRiesgo->getNombre());
                
$phpExcelObject->getActiveSheet()->getStyle("A" $inicioFilasFactoresRiesgos)->getFont()->setBold(true);

                
$indiceInicioColumna "B";
                foreach (
$coleccionGBT as $gbt)
                {
                    
$total $this->getDoctrine()->getRepository('AppBundle:Embarazada')->contarEmbarzadasSegunFactorRiesgoYGBT($factorRiesgo$gbt);
                    
$phpExcelObject->getActiveSheet()->setCellValue($indiceInicioColumna $inicioFilasFactoresRiesgos$total);
                    
$phpExcelObject->getActiveSheet()->getStyle($indiceInicioColumna $inicioFilasFactoresRiesgos)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                    
$indiceInicioColumna++;
                }

// CALCULAR EL TOTAL DEL FACTOR GENRAL
                
$phpExcelObject->getActiveSheet()->setCellValue($referenciaColumnaTOTAL $inicioFilasFactoresRiesgos"=SUM(B" $inicioFilasFactoresRiesgos ":" $referenciaColumnaUltimoGBT $inicioFilasFactoresRiesgos ")");
                
$phpExcelObject->getActiveSheet()->getStyle($referenciaColumnaTOTAL $inicioFilasFactoresRiesgos)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

                
$inicioFilasFactoresRiesgos++;
            } 
Anhh los estilos es mejor establecerlos mediante un arreglo, que contenga todo lo que le vas a aplicar a la referencia de una sola vez, y no como he hecho yo en muchos casos que los aplico por separado.
  #3 (permalink)  
Antiguo 07/04/2017, 13:11
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Cambiar formato de celda PHPExcel (No estilo)

Cita:
Iniciado por KATHYU Ver Mensaje
Pero eso es en horizontal de la A a la J, pero que pasa si yo quiero dar un X formato a una columna ??
Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()->getStyle('B4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
En el codigo anterior se le da el formato con dos decimales (.00) a la celda B4, que pasa si yo quiero que desde la celda B4 hasta donde lleguen las diferentes lineas del reporte, esa columna B tenga ese formato (.00) ??
Hola KATHYU,

Yo creo que sería así:

Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()->getStyle('B4:BN')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);

Donde N es el número de la fila final.

La otra parte no te sé decir ahora mismo, espero que te sirva
  #4 (permalink)  
Antiguo 07/04/2017, 15:14
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 11 años, 4 meses
Puntos: 46
Respuesta: Cambiar formato de celda PHPExcel (No estilo)

Cita:
Iniciado por X_fran Ver Mensaje
KATHYU, yo uso PHPExcel y la forma en que completo las filas es iterando por la colección obtenida desde la BD, es decir "pintando fila a fila (celda x celda)". Te quiero decir que en cada ciclo pues le aplicarías formato a las celdas de la fila.

Código PHP:
//Codigo php 
Anhh los estilos es mejor establecerlos mediante un arreglo, que contenga todo lo que le vas a aplicar a la referencia de una sola vez, y no como he hecho yo en muchos casos que los aplico por separado.
Veamos despacio, si no me equivoco esto es para la ultima pregunta, como dar formato a una columna, verdad ?? no para la primera; como mostrar 000000281 en el xls

Cita:
Iniciado por rbczgz Ver Mensaje
Hola KATHYU,

Yo creo que sería así:

Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()->getStyle('B4:BN')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);

Donde N es el número de la fila final.

La otra parte no te sé decir ahora mismo, espero que te sirva
Eso ya lo probe, pero, aunque es funcional, no me parece la mejor solucion, a no ser que de un solo seleccionemos el rango X1:X1048576 que son las lineas que tiene excel 2007, y me parece una solución nada sofisticada. Puede ser que el reporte como puede tener 25 registros puede tener 235689

Ya seria mejor hacer lo de X_fran, un foreach donde el formato inicie en nuestro primer registro y termine en el ultimo.

Pero en función de tiempo digamos que un enorme rango seria lo mas indicado. Para la primer pregunta no hay respuesta ??

PD: Hoy, en una hora, salgo de vacaciones y me pierdo por dos semanas
por si no me ven que responda.
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #5 (permalink)  
Antiguo 07/04/2017, 20:24
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: Cambiar formato de celda PHPExcel (No estilo)

En todo caso, pues mejor contar cuántos registros te traes de la BD y a partir de ahí pues dar el rango, no es nada hacer un SELECT COUNT(id) .....

Código:
$cantidadRegistros =  resultado de consulta SELECT COUNT(id) .....
Código PHP:
 $objPHPExcel->getActiveSheet()->getStyle('B4:B'.$cantidadRegistros)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00); 
  #6 (permalink)  
Antiguo 07/04/2017, 20:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Cambiar formato de celda PHPExcel (No estilo)

Lo primero es averiguar cómo mostrar eso en EXCEL mismo, una vez que encuentres la solución, la aplicas en PHP.

Si no no vas a usar ese número para operaciones matemáticas, puedes agregar una comilla sencilla y Excel lo tomará como cadena.

$objPHPExcel->getActiveSheet()->getStyle('B4')->setCellValue("'000000281");
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 07/04/2017, 21:05
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: Cambiar formato de celda PHPExcel (No estilo)

Bueno, digamos que se requiere mostrar un número de factura que tiene el formato de KATHYU. La solución se basa en emplear la función TEXT de Excel:
Código PHP:
Ver original
  1. $phpExcelObject->getActiveSheet()->setCellValue("B5", \PHPExcel_Calculation_TextData::TEXTFORMAT($valor, "00000"));
Es cuestión de completar con la cantidad de ceros que desees.

Otra cosa importante, si tienes una matriz que contiene todas las filas a mostrar (proveniente de una consulta SQL, cada campo en el orden de tus columnas) no es necesario iterar para cada uno de los registros, se puede llenar el excel a partir de una referencia de celda de la siguiente forma:
Código PHP:
Ver original
  1. $arrayData = array(  
  2.     array('Nombre 1',   12,   15,   21),
  3.     array('Nombre 2',   56,   73,   86),
  4.     array('Nombre 3',   52,   61,   69),
  5.     array('Nombre 4',   30,   32,    0),
  6. );


Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()
  2.     ->fromArray(
  3.         $arrayData,  // el arreglo de datos para rellenar
  4.         NULL,        // Los valores del arreglo que contengan este valor en específico no se muestran
  5.         'B2'         // La referencia de celda donde se comenzará a escribir el arreglo, si no se especifica se comienza por A1
  6.     );

En ocasiones los datos que se requieren representar en la Hoja Excel no salen en una consulta, por lo que es conveniente iterar por el resultset y efectuar los ajustes pertinentes en las celdas correspondientes.

Última edición por X_fran; 07/04/2017 a las 21:45

Etiquetas: bd, celda, formato, html, phpexcel
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 23:18.