Herramientas de usuario

Herramientas del sitio


informatica:programacion:php:phpexcel

PHPExcel

Clase para la lectura y escritura de ficheros Excel con PHP.

Las notas aquí recogidas se centran en la versión 1.8.1 (año 2015) que ya está obsoleta. A día de hoy, su sucesor es PhpSpreadsheet

Operaciones habituales

Nombrar una hoja

// La "activamos" para trabajar con ella
$objPHPExcel->setActiveSheetIndex(1);
 
// Damos nombre
$objPHPExcel->getActiveSheet()->setTitle('N1');

Escribir números largos

Por defecto, sin introducimos un número en una celda, Excel lo tratará como número y si es demasiado grande lo redondeará o truncará. Para que nos respete el número tal cual, tenemos que forzar a que se introduzca como texto:

$objPHPExcel->getActiveSheet()->setCellValueExplicit('A1', '1234567890', PHPExcel_Cell_DataType::TYPE_STRING);

Añadir una hoja

Por defecto, el fichero Excel se creará con una sola hoja. Si queremos añadir otra:

$objPHPExcel->createSheet();
// La "activamos" para trabajar con ella
$objPHPExcel->setActiveSheetIndex(1);         

Dimensiones de una hoja

Para obtener la última fila y columna que Excel reconoce:

$ultima_fila = $objPHPExcel->getHighestRow();
$ultima_columna = $hoja->getHighestColumn();

Sin embargo, puede ocurrir que la última fila / columna sea mucho mayor de lo esperado porque incluso los estilos pueden falsificar los valores más altos almacenados. Si abrimos el fichero en Excel y presionamos la combinación Ctrl + Fin, Excel nos llevará a la última celda que reconoce. De esta manera podremos comprobar con qué rango está trabajando Excel.

Una solución a esto en PHPExcel, es utilizar los métodos (lentos) getHighestDataRow() y getHighestDataColumn() para identificar la fila y columna más grandes que realmente contienen información en sus celdas.

$ultima_fila_con_datos = $objPHPExcel->getHighestDataRow();
$ultima_columna_con_datos = $hoja->getHighestDataColumn();

Fechas

Convertir desde formato Excel

Excel almacena las fechas como el tiempo transcurrido desde el 01/01/1900 (en algunas versiones utiliza el 01/01/1904).

Para fechas anteriores a 01/01/1900, Excel las representa como una cadena de texto.

Si extraemos una fecha con PHPExcel, obtendremos un número decimal con los días transcurridos. Para transformarlo a fecha UNIX (01/01/1970) y poder trabajar mejor con ella:

$fecha_unix = ($fecha_excel - 25569) * 86400;

25569 son los días entre 01/01/1900 y 01/01/1970. 86499 son los segundos que hay en un día.

A partir de entonces, ya podríamos utilizar $fecha_unix para obtener otros formatos de fecha:

echo gmdate("d/m/Y H:i:s", $fecha_unix);

Escribir en formato fecha Excel

Si un valor de texto lo que queremos transformar en un dato de fecha de Excel, primero tenemos que pasarlo a un valor de fecha Excel (un número):

$obj->setActiveSheetIndex(0)
    ->setCellValue("B1", PHPExcel_Shared_Date::PHPToExcel("2025-01-01 10:20:33"));

Y ahora cambiamos el formato de esa celda a tipo fecha con la máscara que queramos:

$obj->getActiveSheet()
    ->getStyle("B1")
    ->getNumberFormat()
  //->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME);
    ->setFormatCode("dd/mm/yyyy hh:mm:ss");

La constante FORMAT_DATE_DATETIME lo escribiría con el formato d/m/y h:mm (sin ceros iniciales)

Recursos

informatica/programacion/php/phpexcel.txt · Última modificación: por tempwin