Travailler avec Excel en Kotlin : bibliothèques Apache POI et wrapper Kotlin
Kotlin, en tant que langage de programmation moderne pour la JVM, offre d'excellentes possibilités pour automatiser le travail avec les documents bureautiques. Dans cet article, nous verrons comment travailler efficacement avec les fichiers Excel (XLS et XLSX) en Kotlin, en utilisant les bibliothèques populaires Apache POI et son wrapper orienté Kotlin Apache POI for Kotlin.
Pourquoi Kotlin pour travailler avec Excel ?
Kotlin propose une syntaxe plus concise et plus sûre par rapport à Java, ce qui est particulièrement utile lorsqu'on travaille avec des API Excel volumineuses. En utilisant Kotlin, vous pouvez :
- Réduire la quantité de code passe-partout
- Utiliser des types sécurisés et la null-safety
- Appliquer des fonctions d'extension pour améliorer la lisibilité
- Vous intégrer facilement avec les bibliothèques Java existantes
Bibliothèque principale : Apache POI
Apache POI est la norme de facto pour travailler avec les documents Microsoft Office dans l'écosystème JVM. Elle prend en charge :
- La lecture et l'écriture de fichiers XLS (HSSF) et XLSX (XSSF)
- Le travail avec les formules, les styles, les cellules fusionnées
- La création de graphiques et de tableaux croisés dynamiques
- Le traitement de gros fichiers via SXSSF (streaming)
Pour l'intégration dans Gradle (Kotlin DSL), ajoutez dans build.gradle.kts :
dependencies { implementation("org.apache.poi:poi:5.3.0") implementation("org.apache.poi:poi-ooxml:5.3.0")}Bibliothèque wrapper : Apache POI for Kotlin
Il existe plusieurs wrappers Kotlin qui simplifient le travail avec POI. L'un des plus populaires est kotlin-poi (com.github.doyaaaaaken:kotlinpoi). Il ajoute des fonctions d'extension et un style DSL pour créer des fichiers Excel.
Intégration :
repositories { mavenCentral()}
dependencies { implementation("com.github.doyaaaaaken:kotlinpoi:1.0.0")}Exemple 1 : Création d'un fichier XLSX simple (POI pur)
Créons un classeur avec une feuille et remplissons-la de données :
import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileOutputStream
fun createSimpleExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("Données") // Création des en-têtes val headerRow = sheet.createRow(0) headerRow.createCell(0).setCellValue("Nom") headerRow.createCell(1).setCellValue("Âge") headerRow.createCell(2).setCellValue("Ville") // Remplissage des données val data = listOf( listOf("Anna", 28, "Moscou"), listOf("Ivan", 35, "Saint-Pétersbourg"), listOf("Maria", 22, "Kazan") ) data.forEachIndexed { index, rowData -> val row = sheet.createRow(index + 1) rowData.forEachIndexed { cellIndex, value -> when (value) { is String -> row.createCell(cellIndex).setCellValue(value) is Int -> row.createCell(cellIndex).setCellValue(value.toDouble()) else -> row.createCell(cellIndex).setCellValue(value.toString()) } } } // Largeur automatique des colonnes for (i in 0..2) { sheet.autoSizeColumn(i) } // Sauvegarde du fichier FileOutputStream("output.xlsx").use { fileOut -> workbook.write(fileOut) } workbook.close() println("Fichier créé : output.xlsx")}Exemple 2 : Lecture d'un fichier Excel (POI pur)
import org.apache.poi.ss.usermodel.WorkbookFactoryimport java.io.FileInputStream
fun readExcel(filePath: String) { val file = FileInputStream(filePath) val workbook = WorkbookFactory.create(file) val sheet = workbook.getSheetAt(0) println("Lecture de la feuille : ${sheet.sheetName}") println("Nombre total de lignes : ${sheet.physicalNumberOfRows}") for (row in sheet) { val r