src/main/kotlin/com/flightfeather/uav/common/utils/ExcelUtil.kt
@@ -1,14 +1,13 @@
package com.flightfeather.uav.common.utils
import com.flightfeather.uav.common.exception.ResponseErrorException
import com.flightfeather.uav.common.exception.BizException
import org.apache.poi.hssf.usermodel.HSSFRow
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.ss.usermodel.Row
import org.apache.poi.ss.util.CellRangeAddress
import org.apache.poi.xssf.streaming.SXSSFWorkbook
import org.apache.poi.xssf.usermodel.XSSFRow
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import org.jetbrains.kotlin.incremental.isJavaFile
import java.io.ByteArrayInputStream
import java.io.File
import java.io.FileInputStream
import java.io.InputStream
@@ -37,15 +36,18 @@
     * @param headerCheck 文件首行检查回调
     * @param onRow 单行内容回调,从第二行开始
     */
    fun read(file: File, headerCheck: (header: XSSFRow) -> Boolean, onRow: (row: Row) -> Unit): Boolean {
        if (!file.exists() || !file.isFile) throw ResponseErrorException("it's not a normal file!")
    fun readXLXS(file: File, headerCheck: (header: XSSFRow) -> Boolean, onRow: (row: Row) -> Unit): Boolean {
        if (!file.exists() || !file.isFile) throw BizException("it's not a normal file!")
        if (!file.extension.equals("xls", ignoreCase = true) || !file.extension.equals("xlsx", ignoreCase = true)) {
            throw ResponseErrorException("file's extension name should be xls or xlsx!")
            throw BizException("file's extension name should be xls or xlsx!")
        }
        return read(FileInputStream(file), headerCheck, onRow)
        return readXLXS(FileInputStream(file), headerCheck, onRow)
    }
    fun read(input: InputStream, headerCheck: (header: XSSFRow) -> Boolean, onRow: (row: Row) -> Unit): Boolean {
    /**
     * 包括 .xlsx 文件
     */
    fun readXLXS(input: InputStream, headerCheck: (header: XSSFRow) -> Boolean, onRow: (row: Row) -> Unit): Boolean {
        val workbook = XSSFWorkbook(input)
        val sheet1 = workbook.getSheetAt(0)
        val header = sheet1.getRow(sheet1.topRow.toInt())
@@ -60,6 +62,23 @@
    }
    /**
     * 包括 .xls .csv 文件
     */
    fun readXLS(input: InputStream, headerCheck: (header: HSSFRow) -> Boolean, onRow: (row: Row) -> Unit): Boolean {
        val workbook = HSSFWorkbook(input)
        val sheet1 = workbook.getSheetAt(0)
        val header = sheet1.getRow(sheet1.topRow.toInt())
        return if (headerCheck(header)) {
            // 获取迭代器并去除第一行标题
            val iterator = sheet1.rowIterator().also { it.next() }
            iterator.forEach { onRow(it) }
            true
        } else {
            false
        }
    }
    /**
     * 自动处理行合并数据
     */
    fun write2(heads: List<String>, contents: List<Array<Any>>, workbook: SXSSFWorkbook, sheetName: String) {