Travailler avec Excel en Kotlin : Apache POI et bibliothèques wrappers
Kotlin, en tant que langage de programmation moderne pour la JVM, offre d'excellentes possibilités pour travailler avec des données tabulaires. Bien que l'écosystème Kotlin ne dispose pas de support natif pour le format .xlsx, vous pouvez utiliser des bibliothèques Java éprouvées, adaptées à la syntaxe Kotlin. Dans cet article, nous examinerons l'outil principal — Apache POI — et deux wrappers Kotlin populaires : poi-kotlin et kotlinpoi.
1. Apache POI — la base du travail avec Excel
Apache POI est une bibliothèque Java mature pour la lecture et l'écriture de fichiers aux formats Microsoft Office (OLE2 et OOXML). Pour travailler avec des fichiers .xlsx modernes, utilisez le sous-module poi-ooxml. Ajoutez la dépendance dans build.gradle.kts :
dependencies { implementation("org.apache.poi:poi:5.3.0") implementation("org.apache.poi:poi-ooxml:5.3.0")}Lecture d'un fichier Excel en Kotlin
Exemple de lecture des données de la première feuille :
import org.apache.poi.ss.usermodel.*import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileInputStream
fun readExcel(filePath: String) { val file = FileInputStream(filePath) val workbook: Workbook = XSSFWorkbook(file) val sheet: Sheet = workbook.getSheetAt(0)
for (row in sheet) { for (cell in row) { when (cell.cellType) { CellType.STRING -> print("${cell.stringCellValue} ") CellType.NUMERIC -> print("${cell.numericCellValue} ") else -> print(" ") } } println() } workbook.close()}Création d'un fichier Excel
Créons un tableau simple avec des en-têtes :
import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileOutputStream
fun createExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("Données")
// En-têtes val headerRow = sheet.createRow(0) headerRow.createCell(0).setCellValue("Nom") headerRow.createCell(1).setCellValue("Âge") headerRow.createCell(2).setCellValue("Ville")
// Données val data = listOf( listOf("Anna", 25, "Moscou"), listOf("Ivan", 30, "Saint-Pétersbourg"), listOf("Maria", 22, "Kazan") )
data.forEachIndexed { index, rowData -> val row = sheet.createRow(index + 1) rowData.forEachIndexed { cellIndex, value -> row.createCell(cellIndex).setCellValue(value.toString()) } }
workbook.write(FileOutputStream("output.xlsx")) workbook.close()}2. Bibliothèque poi-kotlin — wrapper Kotlin-first
poi-kotlin (version 0.3.0) est un wrapper léger autour d'Apache POI qui ajoute des fonctions d'extension et une syntaxe DSL, caractéristiques de Kotlin. Installation :
repositories { maven("https://jitpack.io")}dependencies { implementation("com.github.nicklausw.poi-kotlin:poi-kotlin:0.3.0")}Exemple avec poi-kotlin
import com.github.nicklausw.poi.kotlin.*
fun dslExample() { val workbook = workbook { sheet("Rapport") { row { cell("Produit") cell("Prix") cell("Quantité") } row { cell("Ordinateur portable") cell(1200.0) cell(5) } row { cell("Souris") cell(25.5) cell(10) } } } workbook.writeToFile("report.xlsx")}Le code est devenu plus lisible, et les blocs imbriqués sheet { row { ... } } rappellent la construction de balisage HTML.
3. Bibliothèque kotlinpoi — approche fonctionnelle
kotlinpoi (ver