poi上傳excel工具類 相容2003/2007版本
阿新 • • 發佈:2019-01-05
寫的比較簡單,可以直接用,拿去按自己專案需求稍微修改下就可以了。直接上程式碼吧,
package com; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 2 * @Author: ponyWang * 3 * @Date: 2018/6/12 11:56 * 4 */ public class ExcelUpload { public List<Map> excelUpload(File file) throws IOException { InputStreamReader reader = new InputStreamReader( new FileInputStream(file)); Workbook workbook = null; try { workbook = new HSSFWorkbook(new FileInputStream(file));//2003版本 } catch (Exception ex) { workbook = new XSSFWorkbook(new FileInputStream(file));//2007版本 } Sheet sheet =workbook.getSheetAt(0); //暫時只做了第一頁 int rowNum = sheet.getLastRowNum();//總行數 Row row = sheet.getRow(0);//第一列 Short cloumns = row.getLastCellNum(); int cloumnNum = cloumns;//總列數 List<String> header = new ArrayList();//表頭資料 for (int i = 0 ; i < cloumnNum ; i++){ Cell cell = row.getCell(i); if (cell == null){ //return "第"+i+1+"行表頭不能為空"; System.out.println("第"+i+1+"行表頭不能為空"); } header.add(cell.getStringCellValue()); } List result = new ArrayList(); DecimalFormat decimalFormat = new DecimalFormat("#0.00"); //迴圈讀取表格內容 for (int j = 1 ;j <= rowNum ; j++){ List currentRowList = new ArrayList(); Row currentRow = sheet.getRow(j); Map rowMap = new HashMap(); for (int k = 0 ; k < cloumnNum ; k++){ String key = header.get(k); if (currentRow == null){ break; } Cell cell = currentRow.getCell(k); if(cell != null){ String cellValue = ""; // 以下是判斷資料的型別 switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: // 數字 cellValue = decimalFormat.format(cell.getNumericCellValue()); double numericCellValue = cell.getNumericCellValue(); long inVal = Math.round(numericCellValue); if (numericCellValue - inVal == 0) { cellValue = inVal+""; } break; case HSSFCell.CELL_TYPE_STRING: // 字串 cellValue = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean cellValue = cell.getBooleanCellValue() + ""; break; case HSSFCell.CELL_TYPE_FORMULA: // 公式 cellValue = cell.getCellFormula() + ""; break; case HSSFCell.CELL_TYPE_BLANK: // 空值 cellValue = ""; break; case HSSFCell.CELL_TYPE_ERROR: // 故障 cellValue = "非法字元"; break; default: cellValue = "未知型別"; break; } rowMap.put(key,cellValue); } } if(rowMap.size() != 0){ currentRowList.add(rowMap); result.add(currentRowList); } } return result; } public static void main(String[] args) throws IOException { File file = new File("C:\\Users\\Singing\\Desktop\\2017-04-16.xlsx"); ExcelUpload instance = new ExcelUpload(); List result= instance.excelUpload(file); System.out.println(result); } }
maven依賴
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10-FINAL</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version> </dependency>
------------------------------------------------------------------------------------------------------------------------
修改了一下,解決了整形匯入會變浮點型的問題