Trabajo con Excel en Kotlin: bibliotecas Apache POI y envoltorios Kotlin

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Excel en Kotlin: Apache POI y bibliotecas envoltorio



Kotlin, como lenguaje de programación moderno para JVM, ofrece excelentes capacidades para trabajar con datos tabulares. Aunque el ecosistema de Kotlin no tiene soporte nativo para el formato .xlsx, puede utilizar bibliotecas Java probadas, adaptadas a la sintaxis de Kotlin. En este artículo, analizaremos la herramienta principal — Apache POI — y dos envoltorios populares de Kotlin: poi-kotlin y kotlinpoi.



1. Apache POI — base para trabajar con Excel



Apache POI es una biblioteca Java madura para leer y escribir archivos en formatos de Microsoft Office (OLE2 y OOXML). Para trabajar con archivos modernos .xlsx, se utiliza el submódulo poi-ooxml. Agregue la dependencia en build.gradle.kts:



dependencies {    implementation("org.apache.poi:poi:5.3.0")    implementation("org.apache.poi:poi-ooxml:5.3.0")}


Lectura de un archivo Excel en Kotlin

Ejemplo de lectura de datos de la primera hoja:

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()}


Creación de un archivo Excel

Creemos una tabla simple con encabezados:

import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileOutputStream

fun createExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("Datos")

// Encabezados val headerRow = sheet.createRow(0) headerRow.createCell(0).setCellValue("Nombre") headerRow.createCell(1).setCellValue("Edad") headerRow.createCell(2).setCellValue("Ciudad")

// Datos val data = listOf( listOf("Ana", 25, "Moscú"), listOf("Iván", 30, "San Petersburgo"), listOf("María", 22, "Kazán") )

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. Biblioteca poi-kotlin — envoltorio Kotlin-first



poi-kotlin (versión 0.3.0) es un envoltorio ligero sobre Apache POI que agrega funciones de extensión y sintaxis DSL, característica de Kotlin. Instalación:



repositories {    maven("https://jitpack.io")}dependencies {    implementation("com.github.nicklausw.poi-kotlin:poi-kotlin:0.3.0")}


Ejemplo con poi-kotlin

import com.github.nicklausw.poi.kotlin.*

fun dslExample() { val workbook = workbook { sheet("Reporte") { row { cell("Producto") cell("Precio") cell("Cantidad") } row { cell("Portátil") cell(1200.0) cell(5) } row { cell("Ratón") cell(25.5) cell(10) } } } workbook.writeToFile("report.xlsx")}

El código se vuelve más legible, y los bloques anidados sheet { row { ... } } recuerdan a la construcción de marcado HTML.



3. Biblioteca kotlinpoi — enfoque funcional



kotlinpoi (ver

Recommendations