페이지에 업로드된 excel 파일을 읽고 백엔드 mysql 데이터베이스에 저장합니다

4254 단어
1. 첫 번째 단계는 원본 파일의 파일 이름을 꺼내는 것입니다.getOriginalFilename(); (백그라운드에서 받는 파일 형식은 MultipartFile)
2, 두 번째 단계, excel 파일의 모든 표의 내용을 가져옵니다.
List idList = excelService.getIdLis tByExcel(file.getInputStream(), fileOriginalName);

파일 이름의 접두사를 통해 xls인지 xlsx인지 판단하기
Workbook work = this.getWorkbook(in, fileName); public Workbook getWorkbook(InputStream inStr, String fileName) throws Exception { Workbook workbook = null; String fileType = fileName.substring(fileName.lastIndexOf(".")); if (".xls".equals(fileType)) { workbook = new HSSFWorkbook(inStr); } else if (".xlsx".equals(fileType)) { workbook = new XSSFWorkbook(inStr); } else { throw new Exception(" excel !"); } return workbook; }

워크북과sheet표는 차이가 있습니다. excel 워크북에는 여러 개의 sheet표가 포함될 수 있습니다.
워크북을 만든 후, 안에 있는sheet를 훑어보고, 줄마다 칸을 훑어보며 데이터를 읽습니다.
Sheet sheet = null; Row row = null; Cell cell = null; for (int iSheet = 0; iSheet < work.getNumberOfSheets(); iSheet++) { sheet = work.getSheetAt(iSheet); if (sheet == null) { continue; } for (int iRow = sheet.getFirstRowNum(); iRow <= sheet.getLastRowNum(); iRow++) { row = sheet.getRow(iRow); if (row == null || row.getFirstCellNum() == iRow) { continue; } List list = new ArrayList<>(); for (int iCell = row.getFirstCellNum(); iCell < row.getLastCellNum(); iCell++) { cell = row.getCell(iCell); String value = ""; int cellType = cell.getCellType(); switch (cellType) { case ExcelCellType.STRING: value = cell.getRichStringCellValue().getString(); break; case ExcelCellType.NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { value = cell.getDateCellValue().toString(); } else { value = cell.getNumericCellValue() + ""; BigDecimal bigDecimal = new BigDecimal(value); value = bigDecimal.toPlainString(); } break; case ExcelCellType.BOOLEAN: value = cell.getBooleanCellValue() + ""; break; case ExcelCellType.FORMULA: value = cell.getCellFormula(); break; case ExcelCellType.BLANK: value = ""; break; default: value = ""; } list.add(value); }

이 해석 읽기에는 고정된 형식이 있으며, 모든 유형의 대응 관계는cell류 원본 코드에서 볼 수 있으며, 여기에 너무 많은 저술을 하지 않습니다.
마지막으로 두 부분의 전체 코드를 정리해라
//  public Workbook getWorkbook(InputStream inStr, String fileName) throws Exception { Workbook workbook = null; String fileType = fileName.substring(fileName.lastIndexOf(".")); if (".xls".equals(fileType)) { workbook = new HSSFWorkbook(inStr); } else if (".xlsx".equals(fileType)) { workbook = new XSSFWorkbook(inStr); } else { throw new Exception(" excel !"); } return workbook; } // , ,  public List getIdListByExcel(InputStream in, String fileName) throws Exception { List allList = new ArrayList<>(); //  Excel  Workbook work = this.getWorkbook(in, fileName); if (null == work) { throw new Exception(" Excel !"); } Sheet sheet = null; Row row = null; Cell cell = null; for (int iSheet = 0; iSheet < work.getNumberOfSheets(); iSheet++) { sheet = work.getSheetAt(iSheet); if (sheet == null) { continue; } for (int iRow = sheet.getFirstRowNum(); iRow <= sheet.getLastRowNum(); iRow++) { row = sheet.getRow(iRow); if (row == null || row.getFirstCellNum() == iRow) { continue; } List list = new ArrayList<>(); for (int iCell = row.getFirstCellNum(); iCell < row.getLastCellNum(); iCell++) { cell = row.getCell(iCell); String value = ""; int cellType = cell.getCellType(); switch (cellType) { case ExcelCellType.STRING: value = cell.getRichStringCellValue().getString(); break; case ExcelCellType.NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { value = cell.getDateCellValue().toString(); } else { value = cell.getNumericCellValue() + ""; BigDecimal bigDecimal = new BigDecimal(value); value = bigDecimal.toPlainString(); } break; case ExcelCellType.BOOLEAN: value = cell.getBooleanCellValue() + ""; break; case ExcelCellType.FORMULA: value = cell.getCellFormula(); break; case ExcelCellType.BLANK: value = ""; break; default: value = ""; } list.add(value); } allList.addAll(list); } } work.close(); return allList; }

좋은 웹페이지 즐겨찾기