1. 程式人生 > >java匯入excel通用方法——筆記

java匯入excel通用方法——筆記

//執行解析
        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;  
    }