web-dev-qa-db-fra.com

Quelles sont les principales différences entre PHPExcel et PhpSpreadsheet?

Dans le projet de PHPOffice il y a deux projets associés aux formats de fichier de feuille de calcul:

PHPExcel

PHPExcel est une bibliothèque écrite en pur PHP et fournissant un ensemble de classes qui vous permettent d'écrire et de lire à partir de différents formats de fichier de feuille de calcul, comme Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML, ... Ce projet est construit autour du standard OpenXML de Microsoft et PHP.

et

PhpSpreadsheets

PhpSpreadsheet est une bibliothèque écrite en pur PHP et fournissant un ensemble de classes qui vous permettent de lire et d'écrire dans différents formats de fichier de feuille de calcul, comme Excel et LibreOffice Calc.

Quelles sont les principales différences entre eux?

17
simhumileco

PHPExcel a été maintenu comme une bibliothèque pour travailler avec des fichiers de feuille de calcul depuis de nombreuses années maintenant, et a été enchaîné en conservant le support des anciennes versions de PHP (> = 5.2), ce qui rend très difficile la progression et l'améliorer. C'est une bibliothèque stable, mais ne sera plus développée.

PHPSpreadsheet est la dernière version de PHPExcel, et de grandes parties ont été réécrites pour tirer parti des nouvelles fonctionnalités de PHP. Tout en conservant toutes les fonctionnalités de PHPExcel, il nécessite un minimum PHP version 5.5 (et qui sera bientôt abandonné pour nécessiter un minimum de 5.6).

Le changement de nom de bibliothèque devait refléter le fait qu'il ne se limitait pas aux feuilles de calcul Excel; mais prend en charge une plus large gamme de formats de fichiers de feuille de calcul.

25
Mark Baker

Suite à Mark Baker's réponse ci-dessus, il existe de nombreux changements architecturaux et syntaxiques dans la façon dont la nouvelle bibliothèque PhpSpreadsheet est utilisée.

Tout d'abord, notez qu'il existe un outil de migration inclus qui exécute la plupart des PhpExcel -to- PhpSpreadsheet des changements syntaxiques pour vous.

Résumé non exhaustif des changements:

(1) Changement le plus important: PhpSpreadsheet repose sur l'installation de Composer .

Fortement inspiré par le npm de node et le bundler de Ruby, Composer n'est pas un gestionnaire de packages au même sens que Yum ou Apt. Bien qu'il traite des "packages") et/ou des bibliothèques, il s'agit d'un gestionnaire de dépendances plus pur, car il gère les dépendances par projet, en les installant dans un répertoire (généralement nommé "fournisseur") à l'intérieur de votre projet. Par défaut, il n'installe rien de manière globale. (Il prend cependant en charge un projet "global" pour plus de commodité via la commande globale.)

Il est possible d'utiliser PhpSpreadsheet sans Composer, et voici quelques réflexions sur la façon de le faire . Voici plus de pensées directement des mavens sur ce même sujet.

FWIW, j'ai ouvert un ticket avec mon hébergeur et en 10 minutes j'ai reçu une réponse qui Composer avait été installé sur notre hébergement partagé (Plan vert, pour ceux qui se demandent). Ne pas dire que vous aurez la même chance, mais peut-être que les informations anecdotiques seront utiles. Cela vaut la peine d'essayer avec votre hébergeur.

(2) Des espaces de noms ont été introduits

Le côté code de PhpSpreadsheet a également évolué depuis PhpExcel. Alors que la classe de point d'entrée de PhpExcel - Classes/PHPExcel.php - reflétait son homonyme, PhpSpreadsheet inclut le fichier autoload.php à la racine du répertoire du fournisseur. Il utilise également certains espaces de noms pour simplifier le codage:

<?php
   use PhpOffice\PhpSpreadsheet\IOFactory;
   use PhpOffice\PhpSpreadsheet\Spreadsheet;
   require_once 'vendor/autoload.php';

(3) Les lecteurs et les écrivains ont été renommés

(4) Les noms abrégés de Reader/Writer ont été modifiés de manière significative. Par exemple:

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

Avez-vous noté que la première lettre est en majuscule? Obligatoire.

(5) Les méthodes IOFactory ont été simplifiées:

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

Par exemple,

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

\PhpOffice\PhpSpreadsheet\IOFactory::registerReader($type, $classname); <=== PhpSpreadsheet

(6) Autres changements/dépréciations:

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

(7) La classe PHPExcel_Autoloader a été entièrement supprimée et est remplacée par le mécanisme de chargement automatique composer.

(8) PDF doivent être installées via composer. Les méthodes PHPExcel_Settings::get/setPdfRenderer() ont été supprimées et sont remplacées par IOFactory :: registerWriter () à la place.

(9) Lors du rendu des graphiques pour les sorties HTML ou PDF, le processus a également été simplifié. Et bien que le support JpGraph soit toujours disponible, il n'est malheureusement pas à jour pour la dernière PHP versions et il générera divers avertissements.

(10) La prise en charge de PclZip a été abandonnée au profit de l'extension plus complète et moderne PHP ZipArchive. Tant de changements à ces classes.

(11) La mise en cache des cellules a été fortement refactorisée pour exploiter le PSR-16. Cela signifie que la plupart des classes liées à cette fonctionnalité ont été supprimées.

(12) Les clés de tableau utilisées pour le style ont été normalisées pour une expérience plus cohérente. Il utilise désormais le même libellé et le même boîtier que le getter et le setter

(13) Les méthodes de manipulation des coordonnées dans PHPExcel_Cell Ont été extraites dans une nouvelle classe dédiée \PhpOffice\PhpSpreadsheet\Cell\Coordinate. Les méthodes comprennent:

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

(14) Les index des colonnes sont désormais basés sur 1. La colonne A est donc l'index 1. Ceci est cohérent avec les lignes commençant à 1 et la fonction Excel COLUMN () qui renvoie 1 pour la colonne A.

(15) Les valeurs par défaut de nombreuses méthodes ont été supprimées lorsque cela n'avait aucun sens. En règle générale, les méthodes de définition ne doivent pas avoir de valeurs par défaut.

(16) Cellule retournée conditionnellement supprimée ... Il n'est plus possible de modifier le type de valeur renvoyée. Il renvoie toujours la feuille de calcul et jamais la cellule ou la règle, dans des méthodes telles que: Worksheet::setCellValue(), Worksheet::setCellValueExplicit(), etc. Par exemple:

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

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

Pour plus de détails sur ces modifications, reportez-vous au document source ci-dessous.

Les références:

PhpSpreadsheet Docs - Migration From PhpExcel - readthedocs.io

Passer de PhpExcel à PhpSpreadsheet par Rob Gravelle d'Ottawa

5
cssyphus