Springboot操作Poi进行Excel导入
以上就是我所要导入的Excel模板。
需求重点
经过这次需求的实现,发现这个需求最难的点 就在 模板模板模板!
模板中数据的关系,理清楚思路
模板中的数据,到底是多sheet还是说有合并单元进行导入
实现感悟
不管是多个sheet、还是说合并单元格、最重要的思想都是说将Excel中的数据进行拼接为一条一条的List记录进行新增数据。
/**
* 用于检测是否是表头行,此方法就是说代码再执行的时候找到一级这个字段的名称,然后知道获取字段从此开始
*
* @param row
* @return
*/
private boolean isHeaderRow(Row row) {
Cell firstCell = row.getCell(1);
return firstCell != null && "一级".equals(firstCell.getStringCellValue().trim());
} /**
*
* 上传文件,进行解析
* @param file 文件
* @return
*/
public Result<?> importExcels(MultipartFile file) {
Map<Integer, List<Object>> sheetDataMap = new HashMap<>();
try {
// 获取工作簿,解析整个Excel文件
Workbook workbook = new XSSFWorkbook(file.getInputStream());
// 循环遍历每个Sheet
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheetAt(i);
// 解析每个Sheet的数据
List<Object> sheetData = parseSheet(sheet);
// 将Sheet的数据存储到Map中,以Sheet名称为Key
sheetDataMap.put(i, sheetData);
}
} catch (Exception e) {
e.printStackTrace();
}
// 处理数据
processingData(sheetDataMap);
return Result.ok(sheetDataMap);
} /** * 解析给定的Sheet,并将数据存储到List中 * * @param sheet 要解析的Sheet * @return 包含每行数据的List */ private List parseSheet(Sheet sheet) { List data = new ArrayList(); boolean isHeaderFound = false; // 循环遍历每一行数据 for (int rowIndex = 1; rowIndex
页:
[1]