Saltar al contenido

¿Cuáles son las principales diferencias entre PHPExcel y PhpSpreadsheet?

Luego de de nuestra extensa selección de datos pudimos resolver esta incógnita que tienen muchos los lectores. Te compartimos la respuesta y esperamos serte de mucha apoyo.

Solución:

PHPExcel se ha mantenido como una biblioteca para trabajar con archivos de hojas de cálculo durante muchos años, y se ha limitado al retener el soporte para versiones anteriores de PHP (> = 5.2), lo que dificulta mucho avanzar y mejorarlo. Es una biblioteca estable, pero no se desarrollará más.

PHPSpreadsheet es la versión más nueva de PHPExcel, y gran parte de ella se ha reescrito para aprovechar las funciones más nuevas de PHP. Si bien conserva toda la funcionalidad de PHPExcel, requiere una versión mínima de PHP de 5.5 (y pronto se eliminará para requerir un mínimo de 5.6).

El cambio en el nombre de la biblioteca fue para reflejar el hecho de que no se limita a hojas de cálculo de Excel; pero admite una gama más amplia de formatos de archivo de hoja de cálculo.

EDITAR 2020:

PHP Excel quedó oficialmente en desuso en 2017 y se archivó permanentemente en 2019.

PHP Excel no se ha mantenido durante años y no debe usarse más. Todos los usuarios deben migrar a su sucesor directo PhpSpreadsheet, u otro alternativa.

Además de la respuesta de Mark Baker anterior, existen numerosos cambios arquitectónicos y sintácticos en la forma en que se usa la nueva biblioteca PhpSpreadsheet.

Primero, tenga en cuenta que hay una herramienta de migración incluida que realiza muchas de lasPhpExcel -to- PhpSpreadsheetcambios sintácticos para usted.

Resumen no exhaustivo de cambios:

(1) Cambio más importante: PhpSpreadsheet depende de la instalación de Composer.

Fuertemente inspirado por el paquete npm y ruby ​​de node, Composer no es un administrador de paquetes en el mismo sentido que Yum o Apt. Aunque trata con “paquetes” y / o bibliotecas, es un administrador de dependencias más puro, ya que administra las dependencias por proyecto, instalándolas en un directorio (generalmente llamado “proveedor”) dentro de su proyecto. De forma predeterminada, no instala nada globalmente. (Sin embargo, admite un proyecto “global” por conveniencia a través del comando global).

Es posible usar PhpSpreadsheet sin Composer, y aquí hay algunas ideas sobre cómo hacerlo. Aquí hay más pensamientos directos de los expertos sobre este mismo tema.

FWIW, abrí un ticket con mi alojamiento web y en 10 minutos recibí una respuesta de que Composer se había instalado en nuestro alojamiento compartido (plan verde, para aquellos que se preguntan). No digo que tendrás la misma buena suerte, pero quizás la información anecdótica sea útil. Vale la pena intentarlo con su proveedor de alojamiento web.

(2) Se introdujeron espacios de nombres

El lado del código de PhpSpreadsheet también ha evolucionado desde PhpExcel. Mientras que la clase de punto de entrada de PhpExcel – Classes / PHPExcel.php – reflejaba su homónimo, PhpSpreadsheet incluye el archivo autoload.php en la raíz del directorio de proveedores. También utiliza algunos espacios de nombres para simplificar la codificación:

(3) Se cambió el nombre de lectores y escritores

(4) Se cambiaron significativamente los nombres abreviados de Lector / Escritor. Por ejemplo:

'Excel2003XML' ==> 'Xml' *the leading capital letter is mandatory !*
'Excel2007'    ==> 'Xlsx'
'Excel5'       ==> 'Xls'
'HTML'         ==> 'Html'
'CSV'          ==> 'Csv'   etc.

¿Tomó nota de que la primera letra está en mayúscula? Requerido.

(5) Se simplificaron los métodos de IOFactory:

PHPExcel_IOFactory::getSearchLocations()  ==> replaced by ==>  IOFactory::registerReader()
PHPExcel_IOFactory::setSearchLocations()  ==> replaced by ==>  IOFactory::registerWriter()
PHPExcel_IOFactory::addSearchLocation()

Por ejemplo,

PHPExcel_IOFactory::addSearchLocation($type, $location, $classname);   <=== PhpExcel

PhpOfficePhpSpreadsheetIOFactory::registerReader($type, $classname); <=== PhpSpreadsheet

(6) Otros cambios / obsolescencias:

Worksheet::duplicateStyleArray()
DataType::dataTypeForValue()
Conditional::get/setCondition()
Worksheet::get/setDefaultStyle()
Worksheet::get/setSelectedCell()
WriterXls::setTempDir() <==== functionality dropped

(7) La clase PHPExcel_Autoloader se eliminó por completo y se reemplazó por el mecanismo de carga automática del compositor.

(8) Las bibliotecas PDF deben instalarse a través de Composer. El PHPExcel_Settings::get/setPdfRenderer() Los métodos fueron eliminados y reemplazados por IOFactory :: registerWriter () en su lugar.

(9) Al renderizar gráficos para salidas HTML o PDF, el proceso también se simplificó. Y aunque el soporte JpGraph todavía está disponible, desafortunadamente no está actualizado para las últimas versiones de PHP y generará varias advertencias.

(10) El soporte para PclZip se eliminó en favor de la extensión PHP ZipArchive, más completa y moderna. Tantos cambios en esas clases.

(11) El almacenamiento en caché de la celda se refactorizó en gran medida para aprovechar PSR-16. Eso significa que se eliminaron la mayoría de las clases relacionadas con esa característica.

(12) Matriz keys utilizados para diseñar se han estandarizado para una experiencia más coherente. Ahora usa la misma redacción y carcasa que el getter y setter.

(13) Métodos para manipular coordenadas en PHPExcel_Cell fueron extraídos a una nueva clase dedicada PhpOfficePhpSpreadsheetCellCoordinate. Los métodos incluyen:

absoluteCoordinate()
absoluteReference()
columnIndexFromString()
coordinateFromString()
buildRange()
... and half-a-dozen more ...

(14) Los índices de columna ahora se basan en 1. Por lo tanto, la columna A es el índice 1. Esto es coherente con las filas que comienzan en 1 y la función COLUMNA () de Excel que devuelve 1 para la columna A.

(15) Los valores predeterminados para muchos métodos se eliminaron cuando no tenían sentido. Normalmente, los métodos de establecimiento no deberían tener valores predeterminados.

(16) Se eliminó la celda devuelta condicionalmente ... Ya no es posible cambiar el tipo de valor devuelto. Siempre devuelve la hoja de trabajo y nunca la celda o la regla, en métodos como: Worksheet::setCellValue(), Worksheet::setCellValueExplicit(), etc. Por ejemplo:

$cell = $worksheet->setCellValue('A1', 'value', true);  <==== PhpExcel

$cell = $worksheet->getCell('A1')->setValue('value');   <==== PhpSpreadsheet

Para obtener detalles adicionales sobre estos cambios, consulte el documento fuente, a continuación.

Referencias:

PhpSpreadsheet Docs - Migración desde PhpExcel - readthedocs.io

Hacer el cambio de PhpExcel a PhpSpreadsheet por Rob Gravelle de Ottawa

Eres capaz de apoyar nuestro ensayo exponiendo un comentario o puntuándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *