| | |
| | | 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 |
| | |
| | | * @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()) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 包括 .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) { |