Trabajo con Excel en Kotlin: descripción general de bibliotecas y ejemplos prácticos
Kotlin, como lenguaje moderno de la JVM, tiene una excelente compatibilidad con el ecosistema Java. Para trabajar con archivos Excel (.xls y .xlsx), la solución más potente y extendida es la biblioteca Apache POI. Permite crear, leer y modificar documentos de Microsoft Office. En este artículo, veremos cómo usar Apache POI en Kotlin, y también conoceremos envoltorios especializados de Kotlin que simplifican el código.
1. Agregar Apache POI a un proyecto Kotlin
Agregue las dependencias en el archivo build.gradle.kts (para Gradle Kotlin DSL):
dependencies { implementation("org.apache.poi:poi:5.2.5") implementation("org.apache.poi:poi-ooxml:5.2.5")}Para Maven, use los artefactos correspondientes poi y poi-ooxml.
Importante:poi-ooxmles necesario para trabajar con el formato .xlsx (Office Open XML), mientras quepoies para el antiguo .xls (HSSF).
2. Crear y escribir un archivo Excel (XLSX) en Kotlin
Creemos un libro simple con una hoja y escribamos datos.
import org.apache.poi.ss.usermodel.*import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileOutputStream
fun createExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("Empleados")
// Encabezados val headerRow = sheet.createRow(0) val headers = listOf("ID", "Nombre", "Cargo", "Salario") headers.forEachIndexed { index, header -> headerRow.createCell(index).setCellValue(header) }
// Datos val data = listOf( listOf(1, "Iván Petrov", "Desarrollador", 120000.0), listOf(2, "María Smirnova", "Analista", 95000.0), listOf(3, "Alexéi Kuznetsov", "Probador", 85000.0) )
data.forEachIndexed { rowIndex, rowData -> val row = sheet.createRow(rowIndex + 1) rowData.forEachIndexed { colIndex, value -> when (value) { is Int -> row.createCell(colIndex).setCellValue(value.toDouble()) is Double -> row.createCell(colIndex).setCellValue(value) is String -> row.createCell(colIndex).setCellValue(value) } } }
// Autoajuste del ancho de las columnas for (i in headers.indices) { sheet.autoSizeColumn(i) }
// Guardar FileOutputStream("employees.xlsx").use { stream -> workbook.write(stream) } println("Archivo creado: employees.xlsx")}Puntos clave:
XSSFWorkbook— clase para trabajar con .xlsx (XSSF). Para .xls useHSSFWorkbook.- Las filas y celdas se indexan desde 0.
autoSizeColumnajusta automáticamente el ancho de las columnas al contenido.- En Kotlin es conveniente usar
usepara cerrar automáticamente el flujo.
3. Leer un archivo Excel en Kotlin
Leamos el archivo creado anteriormente y mostremos los datos en la consola.
import org.apache.poi.ss.usermodel.*import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileInputStream
fun readExcel() { FileInputStream("employees.xlsx").use { stream -> val workbook = XSSFWorkbook(stream) val sheet = workbook.getSheetAt(0)
for (row in sheet) { for (cell in row) { when (cell.cellType) { CellType.STRING -> print("${cell.stringCellValue}\\t") CellType.NUMERIC -> print("${cell.numericCellValue}\\t") CellType.BOOLEAN -> print("${cell.booleanCellValue}\\t") else -> print("?\\t") } } println() } }}Observe la comprobación