feiyu02
2024-08-15 196bb14112448857a885e32dc4149e308e00b01a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@file:Suppress("UNCHECKED_CAST")
 
package cn.flightfeather.supervision.common.docimport
 
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.ss.usermodel.Row
 
object ExcelImport {
 
    fun <T : BaseExcelRule> parseToDataList(workbook: HSSFWorkbook, ruleClz: Class<T>, header: List<String>): List<T> {
        if (!checkLegal(workbook, ruleClz, header)) return emptyList()
 
        val result = mutableListOf<T>()
        val sheet1 = workbook.getSheetAt(0)
        val rowIterator = sheet1.rowIterator()
        while (rowIterator.hasNext()) {
            val row = rowIterator.next()
            if (row.rowNum > 0) {
                if (row.getCell(0).toString().trim().isNotBlank()) {
                    val data = parseToData(row, ruleClz, header)
                    result.add(data)
                }
            }
        }
 
        return result
    }
 
    private fun <T : BaseExcelRule> checkLegal(workbook: HSSFWorkbook, ruleClz: Class<T>, header:List<String>):
            Boolean {
        // TODO: 2023/8/30 表头合法性检查
        return true
    }
 
    private fun <T : BaseExcelRule> parseToData(row: Row, ruleClz: Class<T>, header: List<String>): T {
        val params = mutableListOf<String>()
        repeat(header.size) {
            params.add(row.getCell(it).toString().trim())
        }
        return ruleClz.constructors[0].newInstance(*params.toTypedArray()) as T
    }
}