行单影孤 发表于 2024-8-27 15:13:42

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]
查看完整版本: Springboot操作Poi进行Excel导入