在 Kotlin 中使用 Excel:Apache POI 库和 Kotlin 封装

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Kotlin 中使用 Excel:库概览与实践示例



Kotlin 作为一种现代 JVM 语言,与 Java 生态系统具有出色的兼容性。对于处理 Excel 文件(.xls 和 .xlsx),最强大且最常用的解决方案是 Apache POI 库。它允许创建、读取和修改 Microsoft Office 文档。在本文中,我们将探讨如何在 Kotlin 中使用 Apache POI,并介绍一些专门用于简化代码的 Kotlin 封装。



1. 将 Apache POI 添加到 Kotlin 项目



在 build.gradle.kts 文件(针对 Gradle Kotlin DSL)中添加依赖项:



dependencies {    implementation("org.apache.poi:poi:5.2.5")    implementation("org.apache.poi:poi-ooxml:5.2.5")}


对于 Maven,请使用相应的 poi 和 poi-ooxml 工件。



重要提示: poi-ooxml 用于处理 .xlsx 格式(Office Open XML),而 poi 用于旧的 .xls 格式(HSSF)。


2. 在 Kotlin 中创建和写入 Excel 文件(XLSX)



让我们创建一个包含一个工作表的简单工作簿并写入数据。



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("员工")

// 表头 val headerRow = sheet.createRow(0) val headers = listOf("ID", "姓名", "职位", "薪资") headers.forEachIndexed { index, header -> headerRow.createCell(index).setCellValue(header) }

// 数据 val data = listOf( listOf(1, "伊万·彼得罗夫", "开发人员", 120000.0), listOf(2, "玛丽亚·斯米尔诺娃", "分析师", 95000.0), listOf(3, "阿列克谢·库兹涅佐夫", "测试人员", 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) } } }

// 自动调整列宽 for (i in headers.indices) { sheet.autoSizeColumn(i) }

// 保存 FileOutputStream("employees.xlsx").use { stream -> workbook.write(stream) } println("文件已创建:employees.xlsx")}


关键点:

  • XSSFWorkbook — 用于处理 .xlsx(XSSF)的类。对于 .xls,请使用 HSSFWorkbook。
  • 行和列的索引从 0 开始。
  • autoSizeColumn 自动根据内容调整列宽。
  • 在 Kotlin 中,可以方便地使用 use 自动关闭流。


3. 在 Kotlin 中读取 Excel 文件



让我们读取之前创建的文件并将数据输出到控制台。



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() } }}


请注意,检查

推荐