IT评测·应用市场-qidao123.com技术社区

标题: Springboot操作Poi进行Excel导入 [打印本页]

作者: 乌市泽哥    时间: 2024-8-27 09:01
标题: Springboot操作Poi进行Excel导入



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




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4