個人技術部落格——使用POI操作excel
阿新 • • 發佈:2021-06-28
目錄
技術概述。
Apache POI是Apache軟體基金會的開放原始碼函式庫,POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。
學習該技術的原因:因為專案需要解析使用者上傳的Excel的資料。
技術詳述。
流程圖:
Excel內容:
傳入一個EXCEL檔案並讀取。
public static List<Student> getExcelInfo(MultipartFile mFile) { String fileName = mFile.getOriginalFilename(); if (fileName == null) { fileName = ""; } List<Student> stuList = null; try { if (!validateExcel(fileName)) { return null; } boolean isExcel2003 = true; if (isExcel2007(fileName)) { isExcel2003 = false; } stuList = createExcel(mFile.getInputStream(), isExcel2003); } catch (Exception e) { e.printStackTrace(); } return stuList; }
根據Excel裡面的內容讀取客戶資訊。
public static List<Student> createExcel(InputStream is, boolean isExcel2003) { List<Student> stuList = null; try{ Workbook wb = null; if (isExcel2003) { // 當excel是2003時,建立excel2003 wb = new HSSFWorkbook(is); } else { // 當excel是2007時,建立excel2007 wb = new XSSFWorkbook(is); } stuList = readExcelValue(wb); } catch (IOException e) { e.printStackTrace(); } return stuList; }
讀取Excel裡面的資訊。
private static List<Student> readExcelValue(Workbook wb) { //獲取第一個Sheet Sheet sheet = wb.getSheetAt(0); totalRows = sheet.getPhysicalNumberOfRows(); if (totalRows > 1 && sheet.getRow(0) != null) { totalCells = sheet.getRow(0).getPhysicalNumberOfCells(); } List<Student> studentList = new ArrayList<Student>(); //遍歷該Sheet的行 for (int r = 1; r < totalRows; r++) { Row row = sheet.getRow(r); if (row == null){ continue; } Student student = new Student(); //遍歷該行的列 for (int c = 0; c < totalCells; c++) { Cell cell = row.getCell(c); if (c == 0) { student.setAccount(getValue(cell)); } else if(c == 1) { student.setStudentName(getValue(cell)); } else if(c == 2) { student.setEmail(getValue(cell)); } } studentList.add(student); } return studentList; }
解決excel型別問題。
public static String getValue(Cell cell) {
String value = "";
if(null==cell){
return value;
}
switch (cell.getCellType()) {
//數值型
case NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
value = format.format(date);;
}else {
BigDecimal big= BigDecimal.valueOf(cell.getNumericCellValue());
value = big.toString();
if(null!=value&&!"".equals(value.trim())){
String[] item = value.split("[.]");
if(1<item.length&&"0".equals(item[1])){
value=item[0];
}
}
}
break;
//字串型別
case STRING:
value = cell.getRichStringCellValue().toString();
break;
//公式型別
case FORMULA:
//讀公式計算值
value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {
value = cell.getStringCellValue().toString();
}
break;
//布林型別
case BOOLEAN:
value = ""+ cell.getBooleanCellValue();
break;
default:
value = cell.getStringCellValue().toString();
}
if("null".endsWith(value.trim())){
value="";
}
return value;
}
驗證Excel格式。
public static boolean validateExcel(String filePath) {
if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {
errorMsg = "檔名不是excel格式";
return false;
}
return true;
}
技術使用中遇到的問題和解決過程。
不懂怎麼解析Excel。去百度並學習了用poi解析Excel,讀取Excel中的資料。
總結。
POI可以很方便地對Excel進行解析,讀取Excel中的資料。
參考文獻、參考部落格。
SSM中使用POI實現excel的匯入匯出
POI操作excel基礎用法詳解
SSM專案的excel檔案上傳並新增到資料庫
java解析excel解決excel型別問題