在 Kotlin 中处理 Excel:Apache POI 与封装库
Kotlin 作为一门面向 JVM 的现代编程语言,为处理表格数据提供了出色的能力。尽管 Kotlin 生态系统中没有对 .xlsx 格式的原生支持,但您可以使用经过验证的、并适配了 Kotlin 语法的 Java 库。在本文中,我们将介绍核心工具——Apache POI——以及两个流行的 Kotlin 封装库:poi-kotlin 和 kotlinpoi。
1. Apache POI — 处理 Excel 的基础
Apache POI 是一个成熟的 Java 库,用于读写 Microsoft Office 格式(OLE2 和 OOXML)的文件。要处理现代的 .xlsx 文件,需要使用 poi-ooxml 子模块。在 build.gradle.kts 中添加依赖:
dependencies { implementation("org.apache.poi:poi:5.3.0") implementation("org.apache.poi:poi-ooxml:5.3.0")}在 Kotlin 中读取 Excel 文件
从第一个工作表读取数据的示例:
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()}创建 Excel 文件
创建一个带有标题的简单表格:
import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileOutputStream
fun createExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("数据")
// 标题行 val headerRow = sheet.createRow(0) headerRow.createCell(0).setCellValue("姓名") headerRow.createCell(1).setCellValue("年龄") headerRow.createCell(2).setCellValue("城市")
// 数据 val data = listOf( listOf("安娜", 25, "莫斯科"), listOf("伊万", 30, "圣彼得堡"), listOf("玛丽亚", 22, "喀山") )
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. poi-kotlin 库 — 以 Kotlin 为先的封装库
poi-kotlin(版本 0.3.0)是一个轻量级的 Apache POI 封装库,它添加了 Kotlin 特有的扩展函数和 DSL 语法。安装方式:
repositories { maven("https://jitpack.io")}dependencies { implementation("com.github.nicklausw.poi-kotlin:poi-kotlin:0.3.0")}poi-kotlin 示例
import com.github.nicklausw.poi.kotlin.*
fun dslExample() { val workbook = workbook { sheet("报告") { row { cell("产品") cell("价格") cell("数量") } row { cell("笔记本电脑") cell(1200.0) cell(5) } row { cell("鼠标") cell(25.5) cell(10) } } } workbook.writeToFile("report.xlsx")}代码变得更易读,嵌套的 sheet { row { ... } } 块类似于构建 HTML 标记。
3. kotlinpoi 库 — 函数式方法
kotlinpoi(版