Travailler avec Excel en C++ : aperçu des bibliothèques et exemples de code
Bien que C++ ne dispose pas de prise en charge intégrée du format Excel, il existe plusieurs bibliothèques matures qui permettent de lire, créer et modifier des fichiers .xlsx et .xls. Dans cet article, nous examinerons trois des outils les plus populaires : libxlsxwriter, xlsxio et OpenXLSX. Vous apprendrez comment installer chacun d'eux et obtiendrez des exemples fonctionnels pour des tâches typiques — de la génération de rapports à l'importation de données.
1. libxlsxwriter — création de XLSX à partir de zéro
libxlsxwriter est une bibliothèque légère en C pour écrire des fichiers Excel 2007+ (XLSX). Elle ne nécessite ni objets COM ni Office installé. Elle prend en charge le formatage, les formules, les graphiques, la fusion de cellules et le formatage conditionnel.
Installation (Linux / macOS) :
git clone https://github.com/jmcnamara/libxlsxwriter.gitcd libxlsxwritermakesudo make installExemple : création d'un rapport simple
#include <xlsxwriter.h>
int main() { lxw_workbook *workbook = workbook_new("report.xlsx"); lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "Ventes");
// En-têtes worksheet_write_string(worksheet, 0, 0, "Produit", NULL); worksheet_write_string(worksheet, 0, 1, "Quantité", NULL); worksheet_write_string(worksheet, 0, 2, "Prix", NULL);
// Données worksheet_write_string(worksheet, 1, 0, "Ordinateur portable", NULL); worksheet_write_number(worksheet, 1, 1, 10, NULL); worksheet_write_number(worksheet, 1, 2, 75000, NULL);
// Formule de somme worksheet_write_formula(worksheet, 2, 2, "=C2*B2", NULL);
workbook_close(workbook); return 0;}Compilation : g++ -o create_excel create_excel.cpp -lxlsxwriter
Avantages : haute performance, taille réduite, support actif.
Inconvénients : écriture uniquement (ne peut pas lire les fichiers existants).
2. xlsxio — lecture et écriture de XLSX
xlsxio est une bibliothèque en C avec des liaisons pour C++, qui prend en charge à la fois la lecture et l'écriture de fichiers XLSX. Elle est basée sur minizip et expat. Idéale pour le traitement en flux de gros fichiers.
Installation :
git clone https://github.com/brechtsanders/xlsxio.gitcd xlsxiocmake .makesudo make installExemple : lecture de données depuis Excel
#include <xlsxio_read.h>
int main() { xlsxioreader reader = xlsxioread_open("data.xlsx"); if (reader) { xlsxioreadersheet sheet = xlsxioread_sheet_open(reader, NULL, XLSXIOREAD_SKIP_EMPTY_ROWS); while (xlsxioread_sheet_next_row(sheet)) { const char* value; while ((value = xlsxioread_sheet_next_cell(sheet)) != NULL) { printf("%s\\t", value); } printf(""); } xlsxioread_sheet_close(sheet); xlsxioread_close(reader); } return 0;}Compilation : g++ -o read_excel read_excel.cpp -lxlsxio_read
Avantages : fonctionnement bidirectionnel, prise en charge des gros fichiers.
Inconvénients : formatage limité (uniquement chaînes et nombres).
3. OpenXLSX — interface moderne C++17
OpenXLSX est une bibliothèque header-only pour C++17 qui fournit une API orientée objet pour la lecture et l'écriture de XLSX. Elle ne nécessite aucune dépendance externe, en dehors de la bibliothèque standard.
Installation :
git clone https://github.com/troldal/OpenXLSX.gitcd OpenXLSXmkdir build && cd buildcmake ..makesudo make installExemple : création d'un fichier avec formatage
#include <OpenXLSX/OpenXLSX.hpp>using namespace OpenXLSX;
int main() { Aussi dans la bibliothèque
Client Redis pour C++ : connexion, installation et exemples
Génération de PDF en Java : aperçu des meilleures bibliothèques (iText, Apache PDFBox, OpenPDF)
Rate Limiting en Java : bibliothèques, algorithmes et implémentation
Planificateur de tâches en C# (.NET) : Quartz.NET, Hangfire, Coravel