Trabalhando com Excel em Kotlin: visão geral das bibliotecas e exemplos práticos
Kotlin, como uma linguagem JVM moderna, possui excelente compatibilidade com o ecossistema Java. Para trabalhar com arquivos Excel (.xls e .xlsx), a solução mais poderosa e difundida é a biblioteca Apache POI. Ela permite criar, ler e modificar documentos do Microsoft Office. Neste artigo, veremos como usar o Apache POI em Kotlin, além de conhecer wrappers especializados do Kotlin que simplificam o código.
1. Adicionando Apache POI ao projeto Kotlin
Adicione as dependências no arquivo 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 os artefatos correspondentes poi e poi-ooxml.
Importante:poi-ooxmlé necessário para trabalhar com o formato .xlsx (Office Open XML), enquantopoié para o formato antigo .xls (HSSF).
2. Criando e escrevendo um arquivo Excel (XLSX) em Kotlin
Vamos criar uma pasta de trabalho simples com uma planilha e escrever dados.
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("Funcionários")
// Cabeçalhos val headerRow = sheet.createRow(0) val headers = listOf("ID", "Nome", "Cargo", "Salário") headers.forEachIndexed { index, header -> headerRow.createCell(index).setCellValue(header) }
// Dados val data = listOf( listOf(1, "Ivan Petrov", "Desenvolvedor", 120000.0), listOf(2, "Maria Smirnova", "Analista", 95000.0), listOf(3, "Alexei Kuznetsov", "Testador", 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) } } }
// Largura automática das colunas for (i in headers.indices) { sheet.autoSizeColumn(i) }
// Salvando FileOutputStream("employees.xlsx").use { stream -> workbook.write(stream) } println("Arquivo criado: employees.xlsx")}Pontos-chave:
XSSFWorkbook— classe para trabalhar com .xlsx (XSSF). Para .xls, useHSSFWorkbook.- Linhas e células são indexadas a partir de 0.
autoSizeColumnajusta automaticamente a largura das colunas ao conteúdo.- Em Kotlin, é conveniente usar
usepara fechar automaticamente o fluxo.
3. Lendo um arquivo Excel em Kotlin
Vamos ler o arquivo criado anteriormente e exibir os dados no console.
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 a verificação do tipo de célula usando cell.cellType.