1. 程式人生 > >excel匯入通用核心類,寫的比較粗糙但是使用沒問題

excel匯入通用核心類,寫的比較粗糙但是使用沒問題

首先 寫這個方法時間不多,然後寫的比較粗糙,如果大家想要使用可以完善它優化它,當然如果我有時間也會去完善它優化它把他打成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;
}