1 import org.apache.commons.lang3.StringUtils;
2 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
3 import org.apache.poi.ss.usermodel.*;
4 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
5 import org.springframework.web.multipart.MultipartFile;
6
7 import java.io.IOException;
8 import java.math.BigDecimal;
9 import java.util.*;
10
11 public class ImportExcelTool {
12 public static List<Map<String, String>> readExcel(MultipartFile file) throws IOException {
13 Workbook workbook = null;
14 String fileName = file.getOriginalFilename();
15 if (Objects.requireNonNull(fileName).endsWith(".xlsx"))
16 workbook = new XSSFWorkbook(file.getInputStream());
17 if (fileName.endsWith(".xls"))
18 workbook = new HSSFWorkbook(file.getInputStream());
19 Sheet sheet = Objects.requireNonNull(workbook).getSheetAt(0);
20 int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
21
22 Row row = sheet.getRow(1);
23 List<String> fieldNames = new ArrayList<>();
24 for (int i = 0; i < row.getLastCellNum(); i++)
25 fieldNames.add(row.getCell(i).getRichStringCellValue().getString());
26
27 List<Map<String, String>> lsMap = new ArrayList<>();
28
29 for (int j = 3; j < physicalNumberOfRows; j++) {
30 Map<String, String> dataMap = new HashMap<>();
31 Row dataRow = sheet.getRow(j);
32 if (dataRow == null)
33 break;
34 for (int i = 0; i < dataRow.getLastCellNum(); i++) {
35 String val = getCellValue(dataRow.getCell(i));
36 dataMap.put(fieldNames.get(i), val);
37 }
38 if (dataMap.size() == 0)
39 break;
40
41 lsMap.add(dataMap);
42 }
43 return lsMap;
44 }
45
46
47 private static String getCellValue(Cell cell) {
48 if (cell == null)
49 return "";
50 if (cell.getCellType() == CellType.NUMERIC)
51 if (DateUtil.isCellDateFormatted(cell))
52 return DateUtil.getJavaDate(cell.getNumericCellValue()).toString();
53 else
54 return new BigDecimal(cell.getNumericCellValue()).toString();
55 else if (cell.getCellType() == CellType.STRING)
56 return StringUtils.trimToEmpty(cell.getStringCellValue());
57 else if (cell.getCellType() == CellType.FORMULA)
58 return StringUtils.trimToEmpty(cell.getCellFormula());
59 else if (cell.getCellType() == CellType.BLANK)
60 return "";
61 else if (cell.getCellType() == CellType.BOOLEAN)
62 return String.valueOf(cell.getBooleanCellValue());
63 else if (cell.getCellType() == CellType.ERROR)
64 return "ERROR";
65 else
66 return cell.toString().trim();
67
68 }
69 }