excel匯入通用核心類,寫的比較粗糙但是使用沒問題
阿新 • • 發佈:2018-11-10
首先 寫這個方法時間不多,然後寫的比較粗糙,如果大家想要使用可以完善它優化它,當然如果我有時間也會去完善它優化它把他打成jar包來使用
貼程式碼
/*控制器*/
public ModelAndView ExcelImport(@RequestParam(value="file",required = false)MultipartFile files, HttpServletRequest request){ getExcelInfo(files) }
/* * 解析Excel物件 * */ public int getExcelInfo(MultipartFile mFile) { String fileName = mFile.getOriginalFilename();// 獲取檔名 int falg=0; try { if (!validateExcel(fileName)) {// 驗證檔名是否合格 String errorMsg = "檔案不是excel格式"; return -1; } boolean isExcel2003 = true;// 根據檔名判斷檔案是2003版本還是2007版本 if (isExcel2007(fileName)) { isExcel2003 = false; } falg=createExcel(mFile.getInputStream(), isExcel2003); } catch (IOException e) { e.printStackTrace(); } return falg; }
/** * 根據excel裡面的內容讀取客戶資訊 * * @param is 輸入流 * @param isExcel2003 excel是2003還是2007版本 * @return * @throws IOException */ public int createExcel(InputStream is, boolean isExcel2003) { Workbook wb = null; int falg=0; try { if (isExcel2003) {// 當excel是2003時,建立excel2003 wb = new HSSFWorkbook(is); } else {// 當excel是2007時,建立excel2007 wb = new XSSFWorkbook(is); } Class clazz = null; try { //重要的資訊在這裡 clazz = Class.forName("com.hearing.cloud.background.model.實體類"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //核心方法 List<Object> obj=readExcelValue(wb,clazz);// 讀取Excel裡面的資料 // 這個方法我就不寫了 //-------------------因為你已經在上面拿到了excel的資料 obj 在使用資料的時候可以轉換為實體類 //就像這樣 for(Object i:obj){ os=(實體類)i; } } catch (IOException e) { e.printStackTrace(); } return falg; }
//這是個粗糙的方法
//通用匯入核心 private List<Object> readExcelValue(Workbook wb,Class clazz) { List<Object> results = new ArrayList<Object>(); try { // 得到第一個shell Sheet sheet = wb.getSheetAt(0); // 得到Excel的行數 int totalRows = sheet.getPhysicalNumberOfRows(); // 得到Excel的列數(前提是有行數) int totalCells = 0; if (totalRows > 1 && sheet.getRow(0) != null) { totalCells = sheet.getRow(0).getPhysicalNumberOfCells(); } //獲取標題欄 title Map<Integer, String> TitleList = new HashMap<Integer, String>(); for (int Rtitle = 0; Rtitle < 1; Rtitle++) {//迴圈第一行 Row row = sheet.getRow(Rtitle); for (int Ctitle = 0; Ctitle < totalCells; Ctitle++) { //迴圈第一行的每一列 Cell cell = row.getCell(Ctitle); int type = cell.getCellType(); if (type == Cell.CELL_TYPE_STRING) { TitleList.put(Ctitle, cell.getStringCellValue()); } else if (type == Cell.CELL_TYPE_NUMERIC || type == Cell.CELL_TYPE_FORMULA) { TitleList.put(Ctitle, String.valueOf(cell.getNumericCellValue())); } else if (type == Cell.CELL_TYPE_BOOLEAN) { TitleList.put(Ctitle, String.valueOf(cell.getBooleanCellValue())); } } } // 迴圈內部資料 跳過title 加入到實體類 for (int Rdata = 1; Rdata < totalRows; Rdata++) { Row row = sheet.getRow(Rdata); Object obj = clazz.newInstance(); for (int Cdata = 0; Cdata < totalCells; Cdata++) { String value = ""; Cell cell = row.getCell(Cdata); String types=obj.getClass().getDeclaredField(TitleList.get(Cdata)).getType().toString(); if(types.equals("class java.lang.String")){ switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value=cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_FORMULA: value=cell.getCellFormula(); break; case HSSFCell.CELL_TYPE_NUMERIC: HSSFDataFormatter dataFormatter = new HSSFDataFormatter(); String cellFormatted = dataFormatter.formatCellValue(cell); value=cellFormatted; break; case HSSFCell.CELL_TYPE_ERROR: break; } if(value==null||"".equals(value)){ continue; } obj.getClass().getMethod("set"+toUpperCaseFirstOne(TitleList.get(Cdata)),String.class).invoke(obj,value); } if(types.equals("double")){ HSSFDataFormatter dataFormatter = new HSSFDataFormatter(); value = dataFormatter.formatCellValue(cell); if(value==null||"".equals(value)){ continue; } obj.getClass().getMethod("set"+toUpperCaseFirstOne(TitleList.get(Cdata)),double.class).invoke(obj,Double.valueOf(value)); } if(types.equals("int")){ HSSFDataFormatter dataFormatter = new HSSFDataFormatter(); value = dataFormatter.formatCellValue(cell); if(value==null||"".equals(value)){ continue; } obj.getClass().getMethod("set"+toUpperCaseFirstOne(TitleList.get(Cdata)),int.class).invoke(obj,Integer.valueOf(value)); } if(types.equals("boolean")){ value=cell.getBooleanCellValue()+""; if(value==null||"".equals(value)){ continue; } obj.getClass().getMethod("set"+toUpperCaseFirstOne(TitleList.get(Cdata)),boolean.class).invoke(obj,Boolean.valueOf(value)); } } results.add(obj); } } catch (Exception e) { e.printStackTrace(); } return results; }