• info@oscarperez.es

PHPExcel no funciona

PHPExcel no funciona

Tengo un proyecto realizado en php, y había incluido la libreria PHPExcel. 

Llevaba funcionando desde que lo instale y sin ningún problemas. Pero de repente, sin «motivo aparente» dejo de funcionar, es decir, dejó de generar los ficheros excel y sólo se mostraba una página en blanco. 

Mirando los logs y haciendo debug en un entorno de desarrollo comprobé que se mostraba el siguiente error:

Fatal error: Array and string offset access syntax with curly braces is no longer supported in ..\lib\PHPExcel\Classes\PHPExcel\Shared\String.php on line 526

¡Ya está!, el error que está recibiendo se debe a que la versión de PHPExcel que estoy utilizando no es compatible con la versión de PHP que tengo instalada (8.0.1); ahora recuerdo que actualizamos la versión del PHP en todos nuestros servidores.

La sintaxis de acceso a offset de matriz y cadena con llaves ( { } ) ya no es compatible con las versiones más recientes de PHP (desde la versión 7.4 en adelante), por lo que la versión de PHPExcel que estaba utilizando estaba utilizando esta sintaxis obsoleta. Para resolver el problema, debo actualizar a una versión más reciente de PHPExcel que sea compatible con PHP 8.0.1, pero la última versión de PHPExcel, 1.8.1, se lanzó en 2015. El proyecto quedó oficialmente en desuso en 2017 y se archivó permanentemente en 2019. El proyecto no se ha mantenido durante años y ya no se debe usar. Todos los usuarios deben migrar al sucesor directo: PhpSpreadsheet. Puedes encontrar más información sobre la biblioteca y cómo usarla en la documentación oficial: https://phpspreadsheet.readthedocs.io/en/latest/

¡Bufff!, cambiar de librería, modificar todos los archivos para las descargas de los ficheros excel…

Decidí, antes de realizar la migración de la librería, intentar realizar los cambios por mí mismo en el código de la librería PHPExcel.

Cómo he escrito anteriormente, la sintaxis de acceso a offset de matriz y cadena con llaves ( { } ) ya no es compatible, por ejemplo, en esta instrucción 

c0 = ord($str{0}); 

lo que hay que hacer es cambiar las llaves ( { } ) por corchetes ( [] ), con lo que la instrucción quedaría así:

$c0 = ord($str[0]);

Pues paso a paso, buscando todos los errores y cambiando el código donde fuera necesario.

También me aparecieron otros errores que fui solucionando como:

Deprecated:Required parameter $pValue follows optional parameter $pCoordinate in PHPExcel\Classes\PHPExcel\Worksheet.php on line 1477

Warning: Trying to access array offset on value of type null in PHPExcel\Classes\PHPExcel\Writer\Excel2007\Worksheet.php on line 1117

Después de solucionar todos los errores que iba encontrando, conseguí que la librería volviera a funcionar correctamente.

Si te encuentras en mi situación y no quieres cambiar de librería, descárgate la librería que he modificado desde el siguiente link. Yo la he probado en varias situaciones y me funciona, pero si te falla ya sabes por «donde van los tiros». ¡Ahh! y avísame por favor, para retocar también el código. 

Actualizaciones:

Oscar Pérez Gómez