Foros del Web » Programando para Internet » PHP »

Dar formato texto a una celda con phpExcel

Estas en el tema de Dar formato texto a una celda con phpExcel en el foro de PHP en Foros del Web. Hola!! Estoy trabajando con la libreria phpExcel para exportar/importar los productos de y a mi base de datos. Ya tengo hecho todo el proceso pero ...
  #1 (permalink)  
Antiguo 05/03/2012, 04:47
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 187
Antigüedad: 10 años, 6 meses
Puntos: 0
Dar formato texto a una celda con phpExcel

Hola!!

Estoy trabajando con la libreria phpExcel para exportar/importar los productos de y a mi base de datos. Ya tengo hecho todo el proceso pero me he encontrado con que si un producto tiene la referencia 0001 por ejemplo, al pasarlo a excel me lo escribe como numérico, es decir, como 1.
Me gustaria saber como puedo dar formato tipo texto con esta libreria a una columna o a una celda para que no me cambie la referencia a tipo numérico automáticamente.

Para añadir los datos a la celda utilizao esta función:
Código PHP:
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($numColum,$numRow,$products[$i][$colName]); 
Añado los datos mediante dos fors, donde $numColum es el número de la columna, $numRow es el número de la fila y $products[$i][$colNname] es el valor de la referéncia, 0001.

Aprovecho para preguntar si hay alguna manera de aplicar el mismo formato a toda la columna en lugar de hacerlo celda por celda. Lo he estado buscando pero no lo he encontrado.

También me encuentro con otro problema, y es al calcular el ancho de las columnas.
En todas las columnas lo hago con la siguiente linia de código y me funciona perfectamente:
Código PHP:
$objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($numColum)->setAutoSize(true); 
Pero si tengo que combinar más de una columna no me funciona. Por ejemplo, en la fila 1 quiero combinar 4 celdas (columnas A,B,C y D ) y en la fila 2 que no esten combinadas (las mismas columnas). Entonces no me calcula el ancho de ninguna, ni la combinada ni las demás.
He conseguido que en lugar del setAutoSize, me haga un width predeterminado, pero entonces me lo hace con todas las columnas no combinadas excepto con la priemera que es donde hago el merge.
Bueno, dejo el código a ver si se entiende mejor a lo que me refiero:
Código PHP:
$objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($numColum)->setAutoSize(true);
$numColumA $numColum;
for (
$i 1$i $numRowListAux-1$i++)
{        
$objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($numColum)->setWidth(12);
$numColum++;
}
$objPHPExcel->getActiveSheet()->mergeCellsByColumnAndRow($numColumA,1,$numColum,1); 
A ver si podéis hecharme una manilla jeje
__________________
Perdida en el mundo del conocimiento
  #2 (permalink)  
Antiguo 05/03/2012, 09:28
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 187
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Dar formato texto a una celda con phpExcel

He conseguido que me guarde 0001 en lugar de 1. Aquí os dejo la línia de código por si pudiera ayudar a alguien:

Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()->setCellValueExplicitByColumnAndRow($numColum,$numRow,$products[$i][$colName], PHPExcel_Cell_DataType::TYPE_STRING);

Lo malo es que si hay una referéncia con 0001 y otra con 1 mezcla la información en un único registro y lo pone en una sóla fila ¬¬' no se pq

Tampoco se como hacer para forzar el formato a texto aunque no haya valor, ya que me interesa que toda la columna tenga formato texto en lugar de general he provado con la siguiente línia pero no me ha funcionado:

Código PHP:
Ver original
  1. $objPHPExcel->getActiveSheet()->getCellByColumnAndRow($numColum,$numRow)->setDataType(PHPExcel_Cell_DataType::TYPE_STRING);

Alguien sabe que estoy haciendo mal?
__________________
Perdida en el mundo del conocimiento

Etiquetas: celda, formato, 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 03:07.