java匯入excel通用方法——筆記
阿新 • • 發佈:2019-01-04
//執行解析 DiskFileItemFactory factory = new DiskFileItemFactory(); // 建立工廠類 ServletFileUpload upload = new ServletFileUpload(factory); // 建立FileUpload物件 upload.setSizeMax(25 * 1024 * 1024);// 設定上傳檔案最大值 Workbook book = createWorkBook(in,filename); // 獲得流,讀取資料寫入檔案 // 獲得第一個工作表物件 Sheet sheet = null; //獲得“市場化清單”的sheet for (int i = 0; i < 10; i++) { Sheet _temp = book.getSheetAt(i); if(null!=_temp&&null!=_temp.getSheetName()&&_temp.getSheetName().indexOf("市場化清單")>-1){ sheet = _temp; break; } } if(sheet==null){ //沒有“市場化清單”的sheet throw new Exception("-101"); } if(0==sheet.getLastRowNum()){ //沒有資料 throw new Exception("-102"); } //獲得頭部資料,(年份、月份、戶號、電量、電價、電費) Row row0 = sheet.getRow(0); Row row1 = sheet.getRow(1); getHeadData(row0, row1, excel); LogUtil.getLoger("ywsd.XX").info("excel頭部資料解析成功");
獲取excel中的資料,列不變,名隨意:
String yhmc = getValue( data.getCell(列號));
獲取excel中的資料,列隨意,保持名字不變:
String yhmc = getValue( data.getCell(getCellPosition(titleRow,"使用者名稱稱")));
/** * 判斷是xls檔案還是xlsx檔案 * @param is * @param name * @return * @throws IOException */ private static Workbook createWorkBook(InputStream is,String name) throws IOException{ if(name.toLowerCase().endsWith("xls")){ return new HSSFWorkbook(is); } if(name.toLowerCase().endsWith("xlsx")){ return new XSSFWorkbook(is); } return null; } /** * 得到filed_name在excel是第幾列 * @param titleRow * @param name * @return */ private static int getCellPosition(Row titleRow,String name){ int num=-1; if(null==name||"null".equals(name)||"".equals(name)||"NULL".equals(name)){ return num; } for (int i = 0; i < titleRow.getLastCellNum(); i++) { String title=titleRow.getCell(i).getStringCellValue(); if(name.trim().equals(title.trim())){ return i; } } return num; } /** * 解決excel型別問題,獲得數值 * @param cell * @return */ private static String getValue(Cell cell) { String value = ""; if(null==cell){ return value; } switch (cell.getCellType()) { //數值型 case Cell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { //如果是date型別則 ,獲取該cell的date值 Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); value = format.format(date);; }else {// 純數字 BigDecimal big=new BigDecimal(cell.getNumericCellValue()); value = big.toString(); //格式化數字取小數點後6位 if(null!=value&&!"".equals(value.trim())){ value = big.setScale(6,RoundingMode.HALF_UP)+""; } } break; //字串型別 case Cell.CELL_TYPE_STRING: value = cell.getStringCellValue().toString(); break; // 公式型別 case Cell.CELL_TYPE_FORMULA: //讀公式計算值 value = String.valueOf(cell.getNumericCellValue()); if (value.equals("NaN")) {// 如果獲取的資料值為非法值,則轉換為獲取字串 value = cell.getStringCellValue().toString(); } BigDecimal big=new BigDecimal(value); //格式化數字取小數點後6位 if(null!=value&&!"".equals(value.trim())){ value = big.setScale(6,RoundingMode.HALF_UP)+""; } break; // 布林型別 case Cell.CELL_TYPE_BOOLEAN: value = " "+ cell.getBooleanCellValue(); break; // 空值 case Cell.CELL_TYPE_BLANK: value = ""; break; // 故障 case Cell.CELL_TYPE_ERROR: value = ""; break; default: value = cell.getStringCellValue().toString(); } if("null".endsWith(value.trim())){ value=""; } return value; }