Après mon article «Comment fabriquer des documents Microsoft Word avec PHP» (en utilisant la capacité d'interopération sous Windows), il y avait pas mal de commentaires exhortant une implémentation PHP pure, c'est-à-dire uniquement en utilisant une bibliothèque PHP universelle pour manipuler des fichiers de bureau.
Dans cet article, nous verrons comment utiliser une bibliothèque PHPEXCEL pour fournir une fonction «Exporter vers Excel» dans une application Web afin que l'utilisateur puisse exporter les données dans un fichier Excel 2007/2013 pour une analyse plus approfondie.
Remarque: il existe quelques bibliothèques PHP qui peuvent fournir des manipulations de fichiers Excel (et Office). La lib que nous utilisons ici est appelée PhPEXCEL, un sous-ensemble de PHPOffice, qui peut être cloné ici.
Après ce tutoriel, nous obtiendrons:
Commençons.
Pour utiliser PHPEXCEL, nous devons avoir la version PHP ci-dessus 5.2.0. Il y a également 3 extensions PHP à activer: PHP_ZIP (qui est essentiel pour utiliser les formats Office 2007), PHP_XML et PHP_GD2 (facultatif, mais requis pour la largeur de colonne exacte automatique-calcul).
Ensuite, installez la bibliothèque via le compositeur.
Bien sûr, nous devrions avoir notre base de données opérationnelle. Le vidage de données pour ce tutoriel (lakers.sql) a été téléchargé sur le dépôt associé à cet article. Les données sont récupérées avec une simple déclaration SQL: «Sélectionner * parmi les Lakers» (total 90 records, dont 8 avant-saison et 82 matchs de saison régulière).
De plus, cette démo utilise Silex comme cadre MVC. Twig sera utilisé comme moteur de modèle. Assurez-vous que les dépendances nécessaires sont correctement spécifiées dans votre fichier composer.json.
index.php sera le point d'entrée de notre application Silex. Il y aura deux itinéraires définis:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Route '/' sera notre point d'entrée et affichera les données et le bouton «Exporter». Route '/ Export' effectuera le processus de gestion du dos qui exporte réellement vers Excel. Les deux fonctions sont enveloppées dans une classe définie par l'utilisateur (Classexcel.php). Dans le reste de cet article, nous nous concentrerons sur ce fichier - ou plus précisément, la fonction d'exportation et les fonctions connexes définies dans ce fichier et discuteront de plusieurs aspects importants de la manipulation Excel à l'aide de la bibliothèque PHPEXCEL.
Lorsque nous cliquons sur l'icône pour lancer Excel, l'application Excel démarre. Dans des circonstances normales, il contiendra également un classeur avec 3 (dans Excel 2013, seulement 1) des feuilles de travail. La feuille de travail est la «toile» avec laquelle nous jouons. Ce sont les deux termes les plus importants d'Excel. D'autres termes importants peuvent inclure: cellule, gamme, etc.
Pour instancier un fichier Excel, nous utilisons:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Une instance d'application Excel est généralement mappée sur un fichier Excel physique. Il a ses propres méta-données pour décrire le fichier que nous créons. La méta-données est affichée lorsque nous «Alt-enter» un fichier Excel (ou cliquez avec le bouton droit sur ce fichier et choisissons «Propriétés»):
Les propriétés illustrées dans la boîte de dialogue ci-dessus auront des méthodes SETXXXX correspondantes pour définir ces propriétés, où XXXX est presque identique aux noms de propriétés répertoriés dans la boîte de dialogue:
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
Les méthodes (setxxxx) sont assez auto-explicatives et mappent assez bien la boîte de dialogue «Propriétés». Il y a des écarts dans la cartographie, mais ils ne sont pas trop difficiles pour nous de faire la connexion (par exemple, les «auteurs» seront mappés sur SetCreator).
La feuille de travail est probablement l'objet que nous manipulons le plus: remplir les cellules avec des données ou des formules, en appliquant des styles, en faisant le filtrage des données, en insérant un graphique, etc.
Pour obtenir la référence à une feuille de calcul, nous utilisons:
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
Les feuilles d'un classeur sont toujours 0-indexées. Ainsi, la première feuille (et jusqu'à présent la seule) feuille sera la feuille zéro. Le nom par défaut de cette feuille est toujours une «feuille de travail» et nous pouvons la modifier avec la méthode Settitle.
Pour remplir une cellule / cellules, nous avons au moins deux options:
<span>$ews->setCellValue('a1', 'ID'); // Sets cell 'a1' to value 'ID </span> <span>$ews->setCellValue('b1', 'Season'); </span> <span>... </span> <span>//Fill data </span> <span>$ews->fromArray($data, ' ', 'A2');</span>
La méthode FromArray prend 3 paramètres:
1. La source de données, sous forme de tableau;
2. Une valeur de «remplissage» au cas où les données sont nulles;
3. Une référence cellulaire pour démarrer le remplissage (de gauche à droite, puis jusqu'au bas).
Remarque: Lorsque nous utilisons PDO pour récupérer les données, un simple $ res = $ q-> fetchall (PDO :: fetch_assoc); L'appel obligera l'ensemble de données de résultat renvoyé pour contenir un tableau associé uniquement, sans index. Si Fetchall est appelé sans l'option PDO :: fetch_assoc, l'ensemble de résultats contiendra en fait deux ensembles de données identiques, une dans le formulaire de tableau associé, une dans le formulaire indexé et créera des doublons dans le fichier Excel lors de l'utilisation de FromArray.
Nous pouvons également vouloir coiffer la ligne d'en-tête (ID, saison, etc.). Pour ce faire, nous avons également deux façons:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Une façon consiste à utiliser certaines méthodes Get pour récupérer l'objet de style que nous voulons changer et le changer. Nous le faisons pour le style «remplissage de fond».
L'autre consiste à déclarer un tableau de «style» et à spécifier les styles que nous voulons changer et à les changer. Ensuite, nous utilisons une application de la surface pour appliquer les styles dans un lot. Ici, nous avons changé la police et l'alignement.
Les deux méthodes prennent en charge la plage de leur paramètre ($ en-tête = 'a1: h1';), ce qui est très pratique.
Enfin, nous voulons peut-être régler la largeur de la colonne afin qu'ils puissent s'adapter à la longueur affichée maximale dans chaque colonne:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Malheureusement, cela ne prend pas en charge un paramètre de plage, nous utilisons donc une boucle pour que cela se produise.
Si nous enregistrons le fichier maintenant - nous discuterons de l'enregistrement plus tard - nous verrons que le fichier xlsx est rempli de données et correctement formaté:
J'utilise toujours une feuille séparée pour stocker les données d'origine et au moins une feuille de plus pour afficher les informations de résumé et / ou analytiques.
Pour insérer une nouvelle feuille de calcul, nous faisons:
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
La méthode AddSheet prend deux paramètres.
Avec la feuille de calcul insérée, nous pouvons remplir les cellules de cette feuille de calcul comme d'habitude et appliquer des styles. Dans cette feuille, nous utiliserons des formules:
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
Vous voyez, ce n'est pas différent de ce que nous avons fait dans la section précédente. La chaîne de formule est comme celle que nous entrons dans un fichier Excel pour effectuer le calcul nécessaire.
Remarque: veuillez prêter une attention particulière à la référence cellulaire (G2: G91). Une façon d'écrire paresseuse que la formule consiste à utiliser une gamme comme g: g. Cela fonctionne bien lorsqu'il n'y a pas de graphique dans la feuille. S'il y a un graphique, la notation G: G échouera, lançant une exception.
Cette feuille de «résumé» ressemble à ceci:
Le% indiqué dans la cellule B4 est défini par le code suivant:
<span>$ews->setCellValue('a1', 'ID'); // Sets cell 'a1' to value 'ID </span> <span>$ews->setCellValue('b1', 'Season'); </span> <span>... </span> <span>//Fill data </span> <span>$ews->fromArray($data, ' ', 'A2');</span>
Veuillez noter quelques problèmes de style ici. Pour A1, j'ai appliqué le style suivant:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Le résultat montre que le poids de la police, la taille de la police et l'alignement sont correctement appliqués. La fusion de A1 et B1 en A1 se fait également correctement. Mais, la méthode setautosize échoue sur cette cellule fusionnée. Le résultat est que cette cellule (A1) est toujours pressée. Cela signifie que le calcul de la largeur automatique ne fonctionnera pas toujours. Eh bien, pas un gros problème, de toute façon.
Il est toujours agréable d'avoir une représentation visuelle de nos données, donc le graphique sera utile. Excel a un riche ensemble de graphiques intégrés dans lesquels nous devons choisir. Phpexcel peut puiser dans presque tous ces éléments. Le premier tableau que nous devons créer est un graphique de ligne montrant les hauts et les bas des scores dans chaque match de l'équipe des Lakers et de son adversaire.
La création d'un graphique est un long travail de codage, même avec le support d'une bibliothèque. Le code complet de ce processus peut être trouvé dans les méthodes AddChart1 et AddChart2 qui résident dans notre fichier Classexcel.php. Je vais simplement expliquer les étapes clés.
Une étiquette de série de données identifie les séries de données en leur donnant un nom (étiquette). Dans notre cas, si nous voulons montrer les dizaines de Lakers et de leur adversaire, nous examinons deux étiquettes: le score de soi et le score de l'adversaire. Leurs étiquettes peuvent être trouvées respectivement dans D1 et E1:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Une étiquette de série de données est en fait une instance phPEXcel_chart_dataseriesValues. Le constructeur contient quatre paramètres:
Cela identifie l'étiquette de l'axe x. Par exemple, sur «2013-11-15», les Lakers ont marqué 86 et leur adversaire a marqué 89. Le «2013-11-15» est l'étiquette de ces deux scores. Pour notre cas, nous utiliserons la colonne «Date jouée» de la ligne 2 à la ligne 91:
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
Le constructeur est le même, tout comme les paramètres.
Nous utiliserons «Self Score» (colonne D) et «Score de l'adversaire» (colonne E). Les deux sont de la ligne 2 à la ligne 91.
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
Après avoir les 3 variables critiques ci-dessus, nous pouvons configurer la série de données. Dans Excel, une série de données contient les informations suivantes essentielles à la création d'un graphique:
et le constructeur est appelé en passant simplement tous ces paramètres:
<span>$ews->setCellValue('a1', 'ID'); // Sets cell 'a1' to value 'ID </span> <span>$ews->setCellValue('b1', 'Season'); </span> <span>... </span> <span>//Fill data </span> <span>$ews->fromArray($data, ' ', 'A2');</span>
Ensuite, nous créerons la zone de l'intrigue et la légende:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Une zone de tracé contient une disposition du graphique et de la série de données. La disposition peut spécifier si le graphique doit afficher des valeurs, des pourcentages, etc. Nous pouvons utiliser NULL afin qu'une disposition par défaut soit utilisée.
Une légende est utilisée pour fournir une représentation visuelle des groupes de données.
Et maintenant, enfin, nous pouvons créer le graphique:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Le seul nouveau paramètre de ce constructeur est le nom du graphique. «Chart1» sera assez bon. Un titre du graphique peut être créé via:
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
Une fois le graphique créé, nous définissons sa position et sa taille en définissant sa coordonnée supérieure à gauche et en bas à droite et l'insertons dans la feuille de calcul.
Remarque: La plupart du temps, une référence cellulaire est insensible au cas, mais veuillez utiliser le numéro de lettre de majuscules lorsqu'il y a un graphique dans la feuille.
En tant que dernière étape, nous enregistrons le fichier afin que l'utilisateur puisse le télécharger:
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
Il utilise un modèle d'usine pour créer un objet d'écrivain pour enregistrer le fichier. Un format sera spécifié (nous utilisons le format «Excel2007» dans notre cas).
Assurez-vous que nous avons SettincludCharts (vrai) dans le processus de sauvegarde, sinon le graphique ne sera pas là.
Rappelez-vous quand j'ai dit que Phpexcel pouvait puiser dans presque tous les types de graphiques? Une exception que cette lib ne peut pas bien faire dans Excel 2013 est qu'elle ne produit pas un graphique à tarte utilisable. Dans notre Output.xlsx et notre code, nous avons en fait créé un graphique à tarte (fait dans AddChart1), mais lors de l'ouverture de la sortie.xlsx, Excel 2013 invitera une erreur. Si nous choisissons Continuer, le graphique à secteurs sera perdu et seul le graphique de ligne (fait dans AddChart2) sera conservé. Un rapport de bogue a déjà été déposé dans son dépôt git.
Maintenant, la feuille "Data" ressemblera à ceci:
et une vue zoom-in du graphique. Il est correctement positionné et dimensionné:
Dans cet article, nous avons démontré comment utiliser du PHP pur et un PHP LiB pur (PHPEXCEL) pour manipuler Excel. Nous avons créé un nouveau fichier, rempli les données, ajouté dans une nouvelle feuille et des données analytiques, inséré un graphique et finalement enregistré le fichier à télécharger.
En général, j'ai trouvé cette lib phpexcel qui vaut la peine d'être essayé et facile à apprendre. Sa perspicacité de code dans un IDE peut nous aider beaucoup lors de la programmation.
Nous n'avons pas couvert d'autres fonctionnalités communes dans un fichier Excel - nous rédigerons un article de suivi sur ceux si l'intérêt est suffisamment élevé. Faites-le nous savoir!
Ses documents et exemples officiels sont un endroit agréable pour trouver des explications détaillées d'utilisation d'API et des extraits de code réalisables pour les tâches communes. Lisez-les soigneusement. Ils peuvent être trouvés dans le repo cloné. Essayez cette bibliothèque et faites-nous part de vos propres cas d'utilisation!
Pour installer PHPEXCEL dans votre projet, vous devez utiliser Composer, un outil de gestion de la dépendance dans PHP. Tout d'abord, vous devez installer un compositeur si vous ne l'avez pas fait. Après avoir installé Composer, accédez à votre répertoire de projet dans le terminal et exécutez le compositeur de commande nécessite PhpOffice / PhPExcel. Cette commande téléchargera et installera Phpexcel dans votre projet.
Pour créer un fichier Excel de base à l'aide de PhPEXCEL, vous devez d'abord créer une instance de la classe PHPEXCEL. Ensuite, vous pouvez définir les propriétés du fichier Excel telles que le titre, la description et l'auteur. Après cela, vous pouvez ajouter des données au fichier Excel en accédant aux cellules et en définissant leurs valeurs. Enfin, vous pouvez enregistrer le fichier Excel en créant un écrivain et en appelant la méthode de sauvegarde.
Pour ajouter un graphique à un excel Fichier à l'aide de PhPEXCEL, vous devez d'abord créer une série de données. La série de données représente les données qui seront affichées dans le graphique. Après avoir créé la série de données, vous pouvez créer un graphique et y ajouter la série de données. Ensuite, vous pouvez définir les propriétés du graphique telles que le titre et la légende. Enfin, vous pouvez ajouter le graphique à une feuille de calcul en appelant la méthode AddChart.
Pour lire les données d'un fichier Excel à l'aide de PhPEXCEL, Vous devez d'abord créer un lecteur. Le lecteur est responsable de l'ouverture du fichier Excel et de la lecture de son contenu. Après avoir créé le lecteur, vous pouvez charger le fichier Excel en appelant la méthode de chargement. Ensuite, vous pouvez accéder aux données du fichier Excel en accédant aux cellules et en obtenant leurs valeurs.
Pour écrire des données dans un Fichier Excel existant à l'aide de PhPEXCEL, vous devez d'abord créer un lecteur et charger le fichier Excel. Ensuite, vous pouvez accéder aux cellules dans le fichier Excel et définir leurs valeurs. Après avoir modifié les données, vous pouvez enregistrer les modifications en créant un écrivain et en appelant la méthode de sauvegarde.
PHPEXCEL fournit un ensemble riche de Méthodes de mise en forme des cellules dans un fichier Excel. Vous pouvez définir la police, la couleur, l'alignement, la bordure et le format de numéro d'une cellule. Vous pouvez également fusionner les cellules, définir la largeur et la hauteur d'une cellule et appliquer des styles à une cellule.
Gestion de grands fichiers Excel avec PHPEXCEL peut être difficile en raison des limitations de la mémoire. Cependant, PHPEXCEL fournit une fonction de mise en cache cellulaire qui peut aider à réduire l'utilisation de la mémoire. En permettant la mise en cache des cellules, PhPEXCEL stockera les données cellulaires dans le cache au lieu de la mémoire, ce qui peut réduire considérablement l'utilisation de la mémoire.
PHPEXCEL prend en charge la génération de PDF à partir de fichiers Excel. Pour générer un PDF, vous devez créer un écrivain de type PDF et appeler la méthode de sauvegarde. Notez que vous devez faire installer la bibliothèque de rendu PDF appropriée dans votre projet.
PHPEXCEL vous permet d'ajouter des images à un fichier Excel . Pour ajouter une image, vous devez créer un objet de dessin, définir le chemin d'accès de l'image et spécifier les coordonnées où l'image doit être placée dans la feuille de calcul.
PHPEXCEL utilise des exceptions pour gérer les erreurs. Lorsqu'une erreur se produit, PHPEXCEL lancera une exception. Vous pouvez assister à ces exceptions à l'aide d'un bloc d'essai et les gérer de manière appropriée. Cela vous permet de contrôler le flux de votre programme et de fournir des messages d'erreur significatifs à l'utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!