
Le lundi, vous devez charger un tableur dans un DataFrame. Le mercredi, un client vous a envoyé un modèle de classeur qui doit être mis à jour sans perdre ses graphiques. Le vendredi, l'équipe financière a besoin que le rapport soit exporté en PDF, tandis que le classeur d'origine doit rester protégé par mot de passe. Choisir la meilleure bibliothèque Excel pour Python consiste à faire correspondre la bibliothèque à ces différents besoins. Un mauvais choix peut ne pas se manifester immédiatement : les graphiques disparaissent après l'enregistrement, les formules n'ont aucun résultat calculé exploitable, ou un classeur binaire .xlsb ne peut pas être lu par la bibliothèque que vous avez choisie.
Pour aider les développeurs à faire le bon choix, nous avons testé quatre bibliothèques à l'aide de fixtures de test communes et d'un jeu de données commun de 50 000 lignes : pandas 3.1.0, openpyxl 3.1.5, XlsxWriter 3.3.1 et Spire.XLS for Python 16.8.2 (commercial). Nous avons évalué la prise en charge des formats de fichiers, l'édition et la préservation des classeurs, la gestion des formules, la conversion PDF et HTML, le chiffrement des classeurs, les performances, l'utilisation de la mémoire, les prérequis d'installation et les licences. Les résultats montrent ce que chaque bibliothèque fait bien, où se situent ses limites, et quelle option peut être la plus adaptée à différents projets. Cette comparaison se concentre sur trois bibliothèques open source et un SDK commercial ; les autres solutions commerciales ne sont pas couvertes.
Quelle bibliothèque Excel pour Python choisir ?
Chacune des trois bibliothèques open source excelle dans une tâche précise, et Spire.XLS couvre les projets où ces tâches doivent être exécutées ensemble. Le tableau ci-dessous en donne la version courte. Les sections suivantes expliquent le raisonnement et présentent les données de test.
| Bibliothèque | Idéale pour | Point de vigilance à long terme |
|---|---|---|
| pandas | L'analyse de données | Nécessite d'autres outils pour les opérations au niveau du classeur |
| openpyxl | L'édition de modèles XLSX | Aucun moteur de calcul de formules intégré |
| XlsxWriter | La création de rapports mis en forme | Ne peut pas rouvrir des classeurs existants |
| Spire.XLS | Le traitement Excel multi-étapes | Licence commerciale avec support de l'éditeur et options de mise à jour |
Si vous avez seulement besoin de lire des données dans un DataFrame, pandas avec le moteur calamine suffit, et vous pouvez arrêter la lecture ici. Si votre projet évolue vers l'automatisation, consultez notre guide sur l'automatisation de l'écriture Excel en Python.
Ce que les bibliothèques Excel Python open source font de mieux
pandas, openpyxl et XlsxWriter sont complémentaires plutôt qu'interchangeables. Chacune excelle dans une seule tâche, et c'est pourquoi de nombreux projets finissent par en utiliser deux ou trois côte à côte.
pandas : lire et analyser des données tabulaires
pandas transforme une feuille de calcul en DataFrame, ce qui correspond à la structure idéale pour l'analyse. Avec le moteur calamine, il lit les fichiers .xlsx, .xlsb, .ods et .xls, et il s'est révélé le lecteur le plus rapide de notre test : 294 ms pour 50 000 lignes × 6 colonnes (médiane de cinq exécutions). La mise en forme est possible via Styler avec jinja2, qui remplit et met en gras les cellules comme prévu. Dans pandas 3.1, nos tentatives de format numérique n'ont pas pris effet, et les cellules sont restées en format Général.
La limite est conceptuelle. Un DataFrame n'est pas un classeur. Le réécrire avec to_excel reconstruit le fichier, de sorte que les graphiques, images et tableaux croisés dynamiques ne sont pas conservés. Les formules peuvent être écrites mais ne sont pas calculées. Pour en savoir plus sur la lecture, consultez la lecture de fichiers Excel en Python et la documentation I/O Excel de pandas.
openpyxl : éditer des fichiers .xlsx et .xlsm existants
openpyxl charge un classeur, vous permet de le modifier, puis l'enregistre. Dans notre classeur de test, un aller-retour a conservé les graphiques, images, mises en forme conditionnelles, validations de données, cellules fusionnées, volets figés, filtres et parties de tableaux croisés dynamiques, et Excel 16.0 a ouvert le résultat sans erreur. Il s'agit d'un résultat pour nos fixtures, et non d'une garantie pour chaque forme DrawingML ou projet VBA.
Ses limites sont précises. Il prend en charge quatre formats OOXML (.xlsx, .xlsm, .xltx, .xltm). Il ne possède pas de moteur de calcul, donc les formules restent non calculées. Il ne peut pas ouvrir de fichiers protégés par mot de passe sans un outil externe tel que msoffcrypto. Les tableaux croisés dynamiques peuvent être préservés, mais en créer un nécessite d'assembler manuellement le cache et la définition via l'appel bas niveau add_pivot. Son mode write_only a utilisé le moins de mémoire de tous les writers testés, 79,4 Mo. Documentation : openpyxl.
XlsxWriter : générer de nouveaux rapports
XlsxWriter écrit de nouveaux fichiers .xlsx et le fait bien. Il prend en charge les formats, graphiques, images, mises en forme conditionnelles, validations de données et formules avec valeurs mises en cache. Il s'est révélé le writer le plus rapide de notre test avec 1,74 s pour 50 000 lignes, devant toutes les autres méthodes de ce test, y compris pandas et openpyxl.
Il ne peut pas lire ni modifier un fichier existant. Il ne permet pas de créer de tableau croisé dynamique, ne propose pas de chiffrement et ne produit pas de sortie .xlsb ou .ods. Documentation : XlsxWriter.
Quand les bibliothèques Excel de base ne suffisent plus
Les bibliothèques open source cessent de suffire lorsqu'une tâche franchit la frontière entre leurs spécialités. Cinq situations reviennent régulièrement.
- Plusieurs formats de fichiers dans un même pipeline. pandas peut lire xls, xlsb et ods, mais il renvoie un DataFrame et ne peut pas réenregistrer le classeur modifié sous la même forme. openpyxl et XlsxWriter ne gèrent pas du tout ces formats.
- Des formules qui doivent être recalculées après une modification. openpyxl conserve les formules mais ne peut pas les évaluer. pandas écrit des formules sans résultats, et la valeur mise en cache dépend du moteur sous-jacent : une valeur vide avec openpyxl, un 0 de remplacement avec xlsxwriter. Excel recalcule à l'ouverture, mais tout autre lecteur ne voit rien d'exploitable.
- Les tableaux croisés dynamiques et autres objets complexes. openpyxl peut conserver un tableau croisé dynamique existant mais n'offre aucun moyen de haut niveau d'en créer un. XlsxWriter et pandas n'en offrent aucun.
- La sortie PDF, HTML ou image. Convertir une feuille de calcul en PDF paginé nécessite une bibliothèque supplémentaire, et c'est à vous de gérer la mise en page, la mise à l'échelle et la pagination.
- La protection par mot de passe. Aucune des trois bibliothèques open source ne peut écrire un classeur nécessitant un mot de passe à l'ouverture.
Rien de tout cela ne rend les outils open source inadaptés. Le projet a simplement dépassé ce qu'un outil spécialisé couvre, et le coût se déplace vers du code de collage : conversions de formats, transferts de fichiers entre bibliothèques et mises à niveau de dépendances distinctes. Chaque outil supplémentaire ajoute sa propre dépendance, ses propres exceptions et sa propre façon de transmettre les fichiers.
Ce que vous pouvez faire avec Spire.XLS for Python
Spire.XLS for Python est une bibliothèque commerciale qui gère la lecture, l'édition, le calcul, la conversion et la protection des fichiers Excel via un modèle objet de classeur unique. Elle ne nécessite pas l'installation de Microsoft Office. Voici ce que cela couvre en pratique, avec les limites indiquées.
Lire et écrire plusieurs formats Excel
LoadFromFile ouvre les fichiers .xls, .xlsx, .xlsm, .xlsb et .ods, et SaveToFile écrit aux formats xlsx, xls, xlsb, xlsm, ods, csv, pdf, html et png. Le CSV est chargé avec un argument de délimiteur, comme LoadFromFile("data.csv", ","). Un cas typique est un système amont qui exporte du .xlsb alors que le consommateur aval attend du .xlsx ou du PDF.
from spire.xls import *
wb = Workbook()
wb.LoadFromFile("upstream.xlsb")
wb.SaveToFile("converted.xlsx", ExcelVersion.Version2016)
Une remarque de compatibilité : dans notre test, Excel 16.0 a ouvert les fichiers .xlsb et .ods produits par Spire.XLS, tandis que les lecteurs pandas (pyxlsb et calamine) n'ont pas ouvert ces fichiers précis. Testez les formats hérités en régression avec les lecteurs utilisés par vos systèmes en aval.
Éditer des classeurs existants et créer des tableaux croisés dynamiques
Chargez un classeur, modifiez-le, enregistrez-le. Dans notre classeur de test, les graphiques, images, mises en forme conditionnelles, validations de données, cellules fusionnées, volets figés, filtres et tableaux croisés dynamiques ont tous survécu à l'aller-retour, sans erreur à l'ouverture du fichier par Excel. Les formes DrawingML complexes doivent néanmoins être vérifiées sur vos fichiers réels.
La création d'un tableau croisé dynamique nécessite deux appels :
sheet = wb.Worksheets[0]
cache = wb.PivotCaches.Add(sheet.Range["A1:F20"])
pivot = sheet.PivotTables.Add("SalesPivot", sheet.Range["H3"], cache)
La plage source doit commencer par une ligne d'en-tête, et ces appels créent la structure du tableau croisé dynamique ; les champs de ligne et de valeur sont configurés ensuite. Consultez créer ou manipuler des tableaux croisés dynamiques dans Excel pour la configuration des champs. Dans notre test, Excel a ouvert le fichier obtenu et compté un tableau croisé dynamique.
Recalculer les formules et les valeurs mises en cache
Trois termes importent ici : la formule, son résultat mis en cache et le recalcul. Un fichier contenant une formule mais aucun résultat mis en cache paraît vide à tout lecteur qui ne calcule pas. Spire.XLS inclut un moteur de calcul, de sorte que l'appel à CalculateAllValue() calcule les résultats avant l'enregistrement, et les autres outils qui lisent le fichier peuvent les voir.
wb.LoadFromFile("model.xlsx")
wb.CalculateAllValue()
wb.SaveToFile("model_calculated.xlsx", ExcelVersion.Version2016)
openpyxl et pandas ne peuvent pas effectuer cette étape. XlsxWriter peut stocker une valeur mise en cache, mais uniquement si vous fournissez vous-même le nombre. Pour la syntaxe des formules et des exemples au niveau des cellules, consultez ajouter ou lire des formules dans Excel.
Convertir Excel en PDF, HTML et images
Pour le PDF, définissez d'abord la mise en page. Avec une orientation paysage et une mise à l'échelle ajustée à la page, le graphique de notre test tenait sur la page au lieu d'être coupé.
sheet = wb.Worksheets[0]
sheet.PageSetup.Orientation = PageOrientationType.Landscape
sheet.PageSetup.FitToPagesWide = 1
sheet.PageSetup.FitToPagesTall = 1
wb.SaveToFile("report.pdf", FileFormat.PDF)
La sortie HTML est par défaut un jeu de cadres avec un dossier de ressources. Définir HTMLOptions.ImageEmbedded = True produit un fichier unique autonome (61 Ko dans notre test, avec deux images intégrées en base64). L'export d'images est disponible via ToImage. Consultez notre guide sur la conversion d'Excel en PDF en Python pour les détails de mise en page. Les limites de l'édition d'essai sont abordées dans la section sur les licences ci-dessous.
Protéger des classeurs Excel par mot de passe
Protect("password") définit un mot de passe d'ouverture. Dans notre test, le fichier enregistré est devenu un conteneur chiffré qui ne pouvait pas être ouvert sans le mot de passe, et Spire.XLS pouvait le rouvrir lorsque le mot de passe lui était fourni. Cela convient à la diffusion de rapports et aux cas de conformité. Les protections au niveau des autorisations, comme le verrouillage de feuilles particulières, se configurent séparément ; reportez-vous à la documentation officielle pour celles-ci. Notez que dans la surcharge à deux chaînes, le second argument de SaveToFile est un délimiteur CSV, et non un mot de passe.
Construire un flux de traitement Excel multi-étapes
Un service de reporting mensuel illustre clairement la différence. La tâche : lire un fichier .xlsb amont, mettre à jour ses chiffres d'entrée, recalculer les formules, produire un PDF, chiffrer la copie Excel et l'enregistrer au format .xlsx.
| pandas + openpyxl + 2 autres outils | XlsxWriter | Spire.XLS | |
|---|---|---|---|
| Lire un .xlsb | ✅ (données uniquement) | ❌ | ✅ |
| Conserver les objets du classeur | Non (sur le chemin xlsb) | ❌ | ✅ |
| Recalculer les formules | ❌ | ❌ | ✅ |
| Exporter en PDF | Nécessite une bibliothèque supplémentaire | Nécessite une bibliothèque supplémentaire | ✅ |
| Chiffrer | Nécessite une bibliothèque supplémentaire | ❌ | ✅ |
| Dépendances pour la tâche | 4 ou plus | 1 (écriture uniquement) | 1 |
La voie open source fonctionne, mais elle répartit la tâche sur au moins quatre outils : un pour lire le format binaire, un pour éditer, un pour générer un PDF et un pour chiffrer, plus un convertisseur si vous devez conserver les objets du classeur. Chaque transfert correspond à un fichier écrit par une bibliothèque et relu par une autre. Avec Spire.XLS, les mêmes étapes s'exécutent sur un seul objet classeur :
from spire.xls import *
wb = Workbook()
wb.LoadFromFile("monthly_input.xlsb") # 1. read legacy format
sheet = wb.Worksheets[0]
sheet.Range["B2"].NumberValue = 125000 # 2. update an input value
wb.CalculateAllValue() # 3. recalculate formulas
sheet.PageSetup.Orientation = PageOrientationType.Landscape
sheet.PageSetup.FitToPagesWide = 1
sheet.PageSetup.FitToPagesTall = 1
wb.SaveToFile("monthly_report.pdf", FileFormat.PDF) # 4. PDF
wb.Protect("s3cret") # 5. encrypt
wb.SaveToFile("monthly_report.xlsx", ExcelVersion.Version2016)
wb.Dispose()

Coût total de développement et de maintenance
Nous n'avons pas mesuré le temps gagné, et cet article ne prétend pas avancer de chiffre. La différence que nous pouvons décrire est la complexité : combien d'étapes, de dépendances et d'interfaces la tâche implique.
| Dimension | Combinaison open source | Spire.XLS |
|---|---|---|
| Intégration | Transferts de données et conversions de formats entre outils | Une seule API de classeur |
| Maintenance | Plusieurs composants à mettre à niveau et à maintenir compatibles | Une seule ligne de versions produit |
| Dépannage | Problèmes répartis entre plusieurs projets distincts | Un point d'entrée unique, plus le support de l'éditeur |
| Support | Communauté et gestionnaires de tickets | Canaux de support officiels, selon la licence |
En résumé, une bibliothèque de traitement Excel, et non une dépendance. Votre projet utilisera toujours d'autres packages. Ce qui change, c'est que les étapes Excel partagent un seul modèle objet.
Vous souhaitez tester le flux vous-même ? Commencez par Free Spire.XLS for Python pour la lecture et l'écriture de xlsx et les petits rapports, ou utilisez la version d'essai de Spire.XLS for Python pour évaluer l'API complète.
Performance, déploiement, support et maintenance
Benchmarks de performance
Nous avons exécuté chaque opération dans son propre processus, avec une exécution d'échauffement écartée puis cinq exécutions mesurées, en rapportant la médiane. Le jeu de données comportait 50 000 lignes × 6 colonnes sur une machine Windows x64 (8 cœurs logiques, 7,8 Go de RAM, Python 3.12).
| Tâche | Méthode | Médiane | Mémoire maximale |
|---|---|---|---|
| Lecture | pandas (calamine) | 294 ms | 108,2 Mo |
| Lecture | Spire.XLS | 1 456 ms | 312,2 Mo |
| Lecture | openpyxl read_only
|
1 704 ms | 43,9 Mo |
| Lecture | pandas (moteur openpyxl) | 2 177 ms | 91,9 Mo |
| Écriture | XlsxWriter | 1 744 ms | 118,8 Mo |
| Écriture | pandas → xlsxwriter | 3 477 ms | 118,2 Mo |
| Écriture | openpyxl write_only
|
3 803 ms | 79,4 Mo |
| Écriture | Spire.XLS InsertArray (par colonne) |
3 987 ms | 325,2 Mo |
| Écriture | pandas → openpyxl | 5 205 ms | 173,6 Mo |
XlsxWriter est le writer le plus rapide, pandas avec calamine est le lecteur le plus rapide, et le mode write-only d'openpyxl utilise le moins de mémoire. Ces outils spécialisés restent le meilleur choix pour le débit brut ; Spire.XLS est l'option lorsqu'un même flux de travail nécessite plusieurs tâches Excel. Ses chiffres de lecture, d'écriture et de mémoire figurent dans le tableau ci-dessus. La raison de le choisir est la couverture, pas le débit. Ces chiffres proviennent d'une seule machine et d'une seule charge de travail : considérez-les comme une référence plutôt qu'un classement.
Déploiement et compatibilité
Aucune des quatre bibliothèques ne nécessite Microsoft Office. Excel était installé sur notre machine de test uniquement pour ouvrir les fichiers générés à des fins de validation ; aucune conversion n'a lancé de processus Excel. Les quatre ont fonctionné sous Python 3.14.6.
| pandas | openpyxl | XlsxWriter | Spire.XLS | |
|---|---|---|---|---|
| Taille d'installation | 45 Mo (+ numpy 25 Mo) | 1,8 Mo | 1,6 Mo | 70,6 Mo |
| Import à froid | 788 ms | 524 ms | 230 ms | 1 027 ms |
Spire.XLS représente une installation plus volumineuse, à 70,6 Mo, bien que la pile pandas soit comparable une fois numpy inclus. Pour les images de conteneurs et les démarrages à froid, mettez cela en balance avec les packages qu'il peut remplacer dans un flux multi-étapes.
Mises à jour continues et maintenance du produit
L'équipe produit Spire.XLS confirme un rythme de publication mensuel pour la gamme de produits. Pour le package Python, la fiche PyPI montre des publications régulières en 2026 : 16.2.0 (5 février), 16.4.0 (8 avril), 16.5.0 (7 mai), 16.6.0 (18 juin), 16.7.1 (17 juillet) et 16.8.2 (25 août). La version 16.8.2 a ajouté la prise en charge de la fonction de formule TEXTSPLIT et corrigé des problèmes liés à OFD, selon les notes de version officielles. Le package Python suit la même ligne de versions ; consultez les notes de version pour la version que vous prévoyez de déployer.
Support technique et ressources pour les développeurs
Spire.XLS for Python est fourni avec une documentation d'API, des exemples de code, des tutoriels, un forum de développeurs et un support par e-mail. Les licences commerciales incluent un an de mises à jour gratuites et de support technique, selon les conditions de la licence. Les délais de réponse dépendent du type de licence. Selon la page de support payant de ce produit, les licences Developer OEM, Site et Small Business indiquent 48 heures ouvrées, la licence Site OEM indique 24 heures ouvrées, et les niveaux Gold et Platinum offrent une réponse sous 24 heures avec un support expert. Confirmez les conditions actuelles de votre licence sur la page de support avant d'acheter.
Pour les déploiements en production et en entreprise, le support fait partie des critères de sélection : un chemin d'escalade défini, des objectifs de réponse documentés selon le niveau de licence et un traitement prioritaire pour les niveaux supérieurs. Les bibliothèques open source s'appuient sur des forums communautaires et des gestionnaires de tickets pour la même catégorie de problèmes.
Au-delà de la couverture de l'API, une bibliothèque commerciale est aussi une relation de maintenance. Spire.XLS for Python est activement maintenu, avec des versions régulières qui ajoutent des fonctionnalités et corrigent les problèmes signalés. Les utilisateurs sous licence reçoivent des mises à jour et un support technique selon les conditions de leur licence, et les niveaux de support supérieurs offrent des objectifs de réponse plus rapides et un traitement prioritaire.
Spire.XLS gratuit, d'essai ou commercial
Spire.XLS existe sous trois formes aux limites différentes. Choisissez selon ce que vous devez vérifier.
| Édition | Version | Limites | Idéale pour |
|---|---|---|---|
| Free Spire.XLS | 14.12.4 | .xlsx illimité ; .xls limité à 5 feuilles × 200 lignes ; PDF limité à 3 pages ; pas de filigrane | Vérifier la lecture/écriture xlsx et les petits rapports |
| Spire.XLS d'essai | 16.8.2 | Feuille d'avertissement d'évaluation et filigrane PDF ; conversions non image limitées aux 10 premières pages | Évaluer l'API et les conversions de 10 pages ou moins |
| Commerciale | 16.8.2 | Aucune des limites ci-dessus (voir le contrat de licence) | La production |
Dans les tests des éditions d'essai et Free, la lecture et l'écriture de xlsx n'étaient pas limitées par lignes ou feuilles. Selon les notes de limitation de l'éditeur, l'export d'images n'est pas affecté par la limite de 10 pages. Un détail pratique : après que l'édition Free a enregistré un fichier .xls, le classeur en mémoire est tronqué ; rechargez donc la source si vous devez enregistrer les deux formats.
Que fournit une licence commerciale ?
Une licence commerciale ajoute une relation de mise à jour et de support au-dessus de l'API. Elle comprend :
- un an de mises à jour gratuites
- un an de support technique gratuit
- des délais de réponse dépendant du type de licence
- une réponse sous 24 heures et un support expert aux niveaux Gold et Platinum
- une consultation technique avant achat par e-mail et sur le forum
Quelle bibliothèque Excel Python convient à votre projet ?
Faites correspondre la bibliothèque au nombre de tâches que votre pipeline doit accomplir.
- Uniquement de la lecture de données : utilisez pandas avec calamine.
- Uniquement la génération de nouveaux rapports : utilisez XlsxWriter.
- Uniquement l'édition de modèles existants : utilisez openpyxl.
- Deux besoins avancés ou plus (formats multiples, recalcul, conversion, chiffrement, tableaux croisés dynamiques) : envisagez Spire.XLS, qui apporte aussi un rythme de publication maintenu et un canal de support de l'éditeur.
La règle que nous appliquons : comptez les tâches, pas les fonctionnalités. Une seule tâche appelle un outil spécialisé. Deux tâches constituent le moment de commencer à envisager une bibliothèque intégrée, et trois ou plus dans un même pipeline sont le cas où elle est clairement rentable. Si vous êtes à la frontière, faites passer vos fichiers réels par les deux approches. N'oubliez pas que les résultats de fidélité sont spécifiques aux fichiers testés, et que les objets complexes doivent toujours être vérifiés sur vos propres classeurs.
Prêt à l'essayer sur vos propres fichiers ? Téléchargez Free Spire.XLS for Python ou l'édition d'essai, et consultez la documentation de Spire.XLS for Python pour voir comment le flux ci-dessus se transpose à votre projet.
Questions fréquentes
Quelle bibliothèque Python peut lire et écrire des fichiers Excel sans Microsoft Office ?
Les quatre bibliothèques présentées ici fonctionnent sans Office. pandas (via calamine ou openpyxl) lit, XlsxWriter écrit, openpyxl lit et écrit des .xlsx/.xlsm, et Spire.XLS lit et écrit de nombreux formats. Dans notre test, Excel n'a servi qu'à vérifier les fichiers de sortie.
pandas vs openpyxl : laquelle utiliser ?
Utilisez pandas pour charger des données tabulaires à des fins d'analyse, et openpyxl pour modifier un classeur tout en conservant sa structure. pandas réécrit le fichier lors de l'enregistrement, de sorte que les objets comme les graphiques et les tableaux croisés dynamiques ne sont pas conservés. openpyxl les conserve dans les scénarios que nous avons testés.
openpyxl peut-il modifier un classeur sans perdre les graphiques ni les tableaux croisés dynamiques ?
Dans notre classeur de test, oui : les graphiques, images, mises en forme conditionnelles, validations de données et parties de tableaux croisés dynamiques ont été conservés et Excel a ouvert le fichier normalement. Les formes au-delà de nos fixtures, ainsi que VBA (qui nécessite keep_vba=True), n'ont pas été couverts ; testez donc vos propres fichiers.
Comment convertir Excel en PDF en Python sans Excel installé ?
Utilisez une bibliothèque qui effectue elle-même le rendu des classeurs. Avec Spire.XLS, définissez l'orientation paysage et FitToPagesWide/FitToPagesTall, puis enregistrez avec FileFormat.PDF. L'édition d'essai limite la sortie PDF à 10 pages et ajoute un filigrane.
Ces bibliothèques sont-elles gratuites pour un usage commercial ?
pandas, openpyxl et XlsxWriter sont open source. Spire.XLS est un produit commercial avec une édition Free (xlsx sans restriction ; .xls 5 feuilles × 200 lignes ; PDF 3 pages) et une édition d'essai. Vérifiez chaque licence pour votre cas d'usage.
Quelle bibliothèque prend en charge .xls, .xlsb et .ods ?
pandas avec le moteur calamine lit les trois. openpyxl ne les prend pas en charge, et XlsxWriter n'écrit que du .xlsx. Spire.XLS lit et écrit xls, xlsb et ods, mais vous devez tester sa sortie xlsb et ods avec vos propres lecteurs en aval.
Notre méthode de test
Nous avons testé le 2 novembre 2026 avec pandas 3.1.0, openpyxl 3.1.5, XlsxWriter 3.3.1 et Spire.XLS for Python 16.8.2 (essai), ainsi que Free Spire.XLS 14.12.4 pour les limites d'édition. Le matériel était sous Windows x64 avec 8 cœurs logiques et 7,8 Go de RAM. L'environnement d'exécution était Python 3.12.13, avec la version 3.14.6 utilisée pour vérifier la compatibilité.
Les fixtures de fonctionnalités étaient un classeur de trois feuilles avec 20 lignes, formules, graphiques, images, mise en forme conditionnelle, validation de données, cellules fusionnées, volets figés et filtres, plus une fixture distincte de tableau croisé dynamique. Les performances ont été mesurées sur 50 000 lignes × 6 colonnes (1,18 Mo), avec une exécution d'échauffement écartée, cinq exécutions mesurées et la médiane, chaque opération dans un processus séparé. L'écriture en masse de Spire étant orientée colonnes, son benchmark a utilisé six appels InsertArray plutôt qu'une insertion bidimensionnelle. Microsoft Excel 16.0 n'a servi qu'à ouvrir les fichiers générés et à compter les graphiques et les tableaux croisés dynamiques.
Non couverts : VBA, segments (slicers), Power Query, fichiers de plusieurs millions de lignes, concurrence, et exécutions sous Linux ou macOS. Le benchmark est mono-machine et mono-charge de travail, avec une charge CPU en arrière-plan de 12 à 22 %. Les détails de maintenance et de support proviennent de pages publiques officielles et des fiches PyPI, et non de nos tests.