Herramientas de usuario

Herramientas del sitio


informatica:programacion:php:phpexcel

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:php:phpexcel [2025/01/28 12:06] – [Añadir una hoja] tempwininformatica:programacion:php:phpexcel [2025/05/12 15:25] (actual) – [Escribir en formato fecha Excel] tempwin
Línea 6: Línea 6:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-PHPExcel está obsoleto desde la versión 1.8.1 (año 2015). A día de hoy, su sucesor es [[https://github.com/PHPOffice/PhpSpreadsheet|PhpSpreadsheet]]+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 [[https://github.com/PHPOffice/PhpSpreadsheet|PhpSpreadsheet]]
 </WRAP> </WRAP>
  
Línea 40: Línea 40:
 </code> </code>
  
 +==== Dimensiones de una hoja ====
 +
 +Para obtener la última fila y columna que Excel reconoce:
 +
 +<code php>
 +$ultima_fila = $objPHPExcel->getHighestRow();
 +$ultima_columna = $hoja->getHighestColumn();
 +</code>
 +
 +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 <kbd>Ctrl</kbd> + <kbd>Fin</kbd>, 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.
 +
 +<code php>
 +$ultima_fila_con_datos = $objPHPExcel->getHighestDataRow();
 +$ultima_columna_con_datos = $hoja->getHighestDataColumn();
 +</code>
 ===== Fechas ===== ===== Fechas =====
  
Línea 45: Línea 62:
  
 Excel almacena las fechas como el tiempo transcurrido desde el 01/01/1900 (en algunas versiones utiliza el 01/01/1904). Excel almacena las fechas como el tiempo transcurrido desde el 01/01/1900 (en algunas versiones utiliza el 01/01/1904).
 +
 +<WRAP center round info 60%>
 +Para fechas anteriores a 01/01/1900, Excel las representa como una cadena de texto.
 +</WRAP>
  
 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: 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:
Línea 51: Línea 72:
 $fecha_unix = ($fecha_excel - 25569) * 86400; $fecha_unix = ($fecha_excel - 25569) * 86400;
 </code> </code>
 +
 +<WRAP center round info 60%>
 +''25569'' son los días entre 01/01/1900 y 01/01/1970. ''86499'' son los segundos que hay en un día.
 +</WRAP>
  
 A partir de entonces, ya podríamos utilizar ''$fecha_unix'' para obtener otros formatos de fecha: A partir de entonces, ya podríamos utilizar ''$fecha_unix'' para obtener otros formatos de fecha:
Línea 57: Línea 82:
 echo gmdate("d/m/Y H:i:s", $fecha_unix); echo gmdate("d/m/Y H:i:s", $fecha_unix);
 </code> </code>
 +
 +  * [[https://stackoverflow.com/a/15137090|Solución en StackOverflow]]
 +
 +==== 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):
 +
 +<code php>
 +$obj->setActiveSheetIndex(0)
 +    ->setCellValue("B1", PHPExcel_Shared_Date::PHPToExcel("2025-01-01 10:20:33"));
 +</code>
 +
 +Y ahora cambiamos el formato de esa celda a tipo fecha con la máscara que queramos:
 +
 +<code php>
 +$obj->getActiveSheet()
 +    ->getStyle("B1")
 +    ->getNumberFormat()
 +  //->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME);
 +    ->setFormatCode("dd/mm/yyyy hh:mm:ss");
 +</code>
 +
 +<WRAP center round info 60%>
 +La constante ''FORMAT_DATE_DATETIME'' lo escribiría con el formato ''d/m/y h:mm'' (sin ceros iniciales)
 +</WRAP>
 +
 ===== Recursos ===== ===== Recursos =====
  
   * [[https://github.com/PHPOffice/PHPExcel/tree/1.8/Examples|Ejemplos de la versión 1.8]] (lanzada en 2015 y archivada en 2019)   * [[https://github.com/PHPOffice/PHPExcel/tree/1.8/Examples|Ejemplos de la versión 1.8]] (lanzada en 2015 y archivada en 2019)
informatica/programacion/php/phpexcel.1738062419.txt.gz · Última modificación: por tempwin