Trabalhando com Excel em Kotlin: bibliotecas Apache POI e wrapper Kotlin
Kotlin, sendo uma linguagem de programação moderna para JVM, oferece excelentes oportunidades para automatizar o trabalho com documentos de escritório. Neste artigo, veremos como trabalhar eficientemente com arquivos Excel (XLS e XLSX) em Kotlin, usando as bibliotecas populares Apache POI e seu wrapper orientado a Kotlin Apache POI for Kotlin.
Por que Kotlin para trabalhar com Excel?
Kotlin oferece uma sintaxe mais concisa e segura em comparação com Java, o que é especialmente útil ao trabalhar com APIs extensas do Excel. Usando Kotlin, você pode:
- Reduzir a quantidade de código boilerplate
- Usar tipos seguros e null-safety
- Aplicar funções de extensão para melhorar a legibilidade
- Integrar-se facilmente com bibliotecas Java existentes
Biblioteca principal: Apache POI
Apache POI é o padrão de facto para trabalhar com documentos Microsoft Office no ecossistema JVM. Ela suporta:
- Leitura e escrita de XLS (HSSF) e XLSX (XSSF)
- Trabalho com fórmulas, estilos, células mescladas
- Criação de gráficos e tabelas dinâmicas
- Processamento de arquivos grandes via SXSSF (streaming)
Para adicionar no Gradle (Kotlin DSL), adicione em build.gradle.kts:
dependencies { implementation("org.apache.poi:poi:5.3.0") implementation("org.apache.poi:poi-ooxml:5.3.0")}Biblioteca wrapper: Apache POI for Kotlin
Existem vários wrappers Kotlin que simplificam o trabalho com POI. Um dos populares é kotlin-poi (com.github.doyaaaaaken:kotlinpoi). Ele adiciona funções de extensão e estilo DSL para criar arquivos Excel.
Adição:
repositories { mavenCentral()}
dependencies { implementation("com.github.doyaaaaaken:kotlinpoi:1.0.0")}Exemplo 1: Criando um arquivo XLSX simples (POI puro)
Criaremos uma pasta de trabalho com uma planilha e a preencheremos com dados:
import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileOutputStream
fun createSimpleExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("Dados") // Criando cabeçalhos val headerRow = sheet.createRow(0) headerRow.createCell(0).setCellValue("Nome") headerRow.createCell(1).setCellValue("Idade") headerRow.createCell(2).setCellValue("Cidade") // Preenchendo dados val data = listOf( listOf("Ana", 28, "Moscou"), listOf("Ivan", 35, "São Petersburgo"), 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()) } } } // Largura automática das colunas for (i in 0..2) { sheet.autoSizeColumn(i) } // Salvando o arquivo FileOutputStream("output.xlsx").use { fileOut -> workbook.write(fileOut) } workbook.close() println("Arquivo criado: output.xlsx")}Exemplo 2: Lendo um arquivo Excel (POI puro)
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("Lendo planilha: ${sheet.sheetName}") println("Total de linhas: ${sheet.physicalNumberOfRows}") for (row in sheet) { val r Também na biblioteca
Filas de Tarefas em Swift: GCD, OperationQueue e Swift Concurrency
Trabalhando com Kafka em Kotlin: bibliotecas e exemplos
Trabalhando com Markdown em TypeScript: bibliotecas, parsers e ferramentas
Trabalhando com CSV em Rust: biblioteca csv e processamento de dados
Cliente Redis em Rust: guia completo da biblioteca redis-rs