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
También en la biblioteca
league/csv para PHP: guía completa con ejemplos
Autorización y autenticación en Swift (iOS/macOS): guía completa
gRPC para Kotlin: bibliotecas, servidor y cliente — ejemplos de código