Outils EasyExcel pour la Manipulation de Fichiers Excel

La bibliothèque EasyExcel simplifie grandement les opérations de lecture et d'écriture de fichiers Excel en Java. Elle propose une API conviviale pour gérer diverses tâches, notamment la lecture synchrone et asynchrone, l'exportation de données, le remplissage de modèles, la personnalisation des en-têtes et du contenu, ainsi que la gestion de plusieurs feuilles de calcul.

Gestion des Données avec EasyExcelUtils

La classe EasyExcelUtils centralise les méthodes courantes pour interagir avec les fichiers Excel.

Lecture Synchrone

Permet de lire des données depuis un fichier Excel de manière synchrone. Il est possible de lire sans modèle (chaque ligne est représentée par une Map) ou avec un modèle (les données sont directement converties en objets d'une classe spécifiée).

Lecture sans modèle

Les méthodes syncRead permettent de lire le contenu d'une feuille de calcul spécifique, en commençant potentiellement à une ligne donnée et en spécifiant le nombre de lignes d'en-tête.


// Lecture de la première feuille, à partir de la deuxième ligne (par défaut)
List<map string="">> data = EasyExcelUtils.syncRead("chemin/vers/fichier.xlsx");

// Lecture d'une feuille spécifique (index 1)
List<map string="">> sheetData = EasyExcelUtils.syncRead("chemin/vers/fichier.xlsx", 1);

// Lecture d'une feuille spécifique en spécifiant le nombre de lignes d'en-tête
List<map string="">> customHeadData = EasyExcelUtils.syncRead("chemin/vers/fichier.xlsx", 0, 2); // Feuille 0, 2 lignes d'en-tête
</map></map></map>

Lecture avec modèle

Les méthodes syncReadModel convertissent les données lues en instances d'une classe modèle fournie. Vous pouvez spécifier la feuille et le nombre de lignes d'en-tête.


// Lecture avec un modèle Java (ex: classe MonModele)
List<monmodele> modelData = EasyExcelUtils.syncReadModel("chemin/vers/fichier.xlsx", MonModele.class);

// Lecture d'une feuille spécifique avec un modèle
List<monmodele> specificSheetModelData = EasyExcelUtils.syncReadModel(inputStream, MonModele.class, 2); // Feuille 2
</monmodele></monmodele>

Lecture Asynchrone

Pour le traitement de gros volumes de données, la lecture asynchrone via des AnalysisEventListener est recommnadée. Les données sont traitées par lots, améliorant les performances.

Lecture sans modèle asynchrone


// Utilisation d'un écouteur personnalisé
EasyExcelUtils.asyncRead("chemin/vers/gros_fichier.xlsx", new MonEcouteur());

// Lecture asynchrone d'une feuille spécifique
EasyExcelUtils.asyncRead(file, new MonEcouteur(), 3); // Feuille 3

Lecture avec modèle asycnhrone


// Lecture asynchrone convertie en objets MonModele
EasyExcelUtils.asyncReadModel("chemin/vers/donnees.xlsx", new MonEcouteurModele<MonModele>(), MonModele.class);

// Lecture asynchrone d'une feuille spécifique avec modèle et en-têtes personnalisés
EasyExcelUtils.asyncReadModel(inputStream, new MonEcouteurModele<MonModele>(), MonModele.class, 1, 2); // Feuille 1, 2 lignes d'en-tête

Écriture de Fichiers

EasyExcel permet l'écriture de données dans des fichiers Excel, que ce soit sans modèle (en fournissant des listes de listes) ou avec un modèle Java.

Écriture sans modèle


List<List<String>> headers = Arrays.asList(Arrays.asList("Colonne A", "Colonne B"));
List<List<Object>> rows = Arrays.asList(Arrays.asList("Valeur 1", 100), Arrays.asList("Valeur 2", 200));

// Écriture dans un fichier
EasyExcelUtils.write("chemin/sortie/nouveau_fichier.xlsx", headers, rows);

// Écriture avec nom de feuille personnalisé
EasyExcelUtils.write(outputStream, headers, rows, 0, "Données Principales");

Écriture avec modèle


User utilisateur = new User(1, "Alice", "alice@example.com");
List<User> userData = Collections.singletonList(utilisateur);

// Écriture en utilisant une classe modèle
EasyExcelUtils.write("chemin/sortie/utilisateurs.xlsx", User.class, userData);

// Écriture sur une feuille spécifique avec nom
EasyExcelUtils.write(file, User.class, userData, 1, "Utilisateurs Actifs");

Écriture basée sur un modèle (Template Fill)

Permet de remplir un fichier Excel existant (template) avec des données.


// Remplissage d'un template
EasyExcelUtils.writeTemplate("chemin/sortie/rapport.xlsx", "template.xlsx", userData);

Écriture Multi-Sheet avec EasyExcelWriterFactory

La classe EasyExcelWriterFactory facilite la création de fichiers Excel contenant plusieurs feuilles de calcul, en utilisant une approche chaînée.


// Création d'un fichier avec plusieurs feuilles
EasyExcelWriterFactory writer = EasyExcelUtils.writeWithSheets(response.getOutputStream());
writer.writeModel(User.class, usersList, "Utilisateurs")
      .write(customHeaders, dataList, "Données Brutes")
      .finish(); // Important de terminer l'écriture et fermer le flux

Gestion des Gros Volumes avec ExcelListener

L'ExcelListener est conçu pour traiter efficacement de grandes quantités de données lors de la lecture. Il utilise un ExecutorService pour paralléliser le traitement par lots des lignes et gérer les exceptions spécifiques à la conversion des données Excel.


// Exemple d'utilisation dans un listener personnalisé
public class MonEcouteurModele<T> extends ExcelListener<T> {

    public MonEcouteurModele(Integer sheetNum, Executor exec) {
        super(sheetNum, exec);
    }

    @Override
    public void invoke(T data, AnalysisContext context) {
        super.invoke(data, context); // Appel au traitement par lots du parent
        // Logique métier spécifique à chaque ligne ici si nécessaire
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        super.doAfterAllAnalysed(context); // Assure que les dernières données sont traitées
        // Logique métier après l'analyse complète de la feuille
    }

    // Méthode pour sauvegarder les lots de données (exemple)
    private void saveToDB(List<T> batchData) {
        // Implémentation de la sauvegarde en base de données
        System.out.println("Sauvegarde de " + batchData.size() + " enregistrements.");
    }
}

Cet ansemble d'outils offre une solution robuste et flexible pour toutes vos exigences de manipulation de fichiers Excel en Java.

Étiquettes: Java EasyExcel Excel manipulation de fichiers lecture de données

Publié le 17 juillet à 20h06