小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

poi excel批量導入 解決各類型的數(shù)據(jù)

 小丑g22xft6chp 2016-12-13

注意引入的都是poi的包,使用Cell,excel2003的.xls對應是HSSFCell,而之后的xlsx對應的則是XSSFCell,但是他們都繼承于Cell,所以使用Cell就可以使用兩種格式的excel導入了,下面解決excel中數(shù)據(jù)的各種格式

  1.               //讀取excel  
  2. try {  
  3.     request.setCharacterEncoding("gbk");  
  4.     response.setContentType("text/html;charset=gbk");  
  5.     // 1. 創(chuàng)建工廠類  
  6.      DiskFileItemFactory factory = new DiskFileItemFactory();  
  7.     // 2. 創(chuàng)建FileUpload對象  
  8.      ServletFileUpload upload = new ServletFileUpload(factory);  
  9.        
  10.     // 3. 判斷是否是上傳表單  
  11.     // boolean b = upload.isMultipartContent(request);  
  12.      // 設置上傳文件最大值  
  13.      upload.setSizeMax(25 * 1024 * 1024);  
  14.     // 是文件上傳表單  
  15.     // 4. 解析request,獲得FileItem項  
  16.      List<FileItem> fileitems = upload.parseRequest(request);  
  17.     // 5. 遍歷集合  
  18.      for (FileItem item : fileitems) {  
  19.         // 判斷是不是普通字段  
  20.          if (!item.isFormField()) {  
  21.                 // 獲得流,讀取數(shù)據(jù)寫入文件  
  22.                 InputStream in = item.getInputStream();  
  23.                 Workbook book = createWorkBook(in,item.getName());  
  24.                 // 獲得第一個工作表對象  
  25.                 Sheet sheet = book.getSheetAt(0);  
  26.                 if(0==sheet.getLastRowNum()){  
  27.                     //如果沒有數(shù)據(jù)  
  28.                     request.setAttribute("message", "excel的sheet0中不存在數(shù)據(jù)");  
  29.                     request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);  
  30.                 }  
  31.                   
  32.                 // 第一行為標題,從第二行開始錄入  
  33.                 for (int i = 1; i <= sheet.getLastRowNum(); i++) {  
  34.                     //標題行,用來對比方便得到數(shù)據(jù)  
  35.                     Row titleRow = sheet.getRow(0);  
  36.                     //數(shù)據(jù)行  
  37.                     Row row = sheet.getRow(i);  
  38.                     //獲得值  
  39.                     String value_temp= this.getValue((Cell) row.getCell(2));  
  40.                 }  
  41.          }  
  42.      }  
  43.       
  44. } catch (Exception e) {  
  45.     e.printStackTrace();  
  46.     message="導入失敗<br/>"+message;  
  47.     request.setAttribute("message",message);  
  48.     request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);  
  49.       
  50. }  

數(shù)字類型  時間類型 字符串類型驗證沒問題,

數(shù)字類型如果是1234.0會將其變成1234  如果是1234.5保存仍然保持小數(shù)位1234.5,用來解決電話號碼和普通數(shù)字問題

時間類型將其格式化成了 2015-12-09 12:13:12這種格式便于保存數(shù)據(jù)庫

 

  1. //解決excel類型問題,獲得數(shù)值  
  2.     public  String getValue(Cell cell) {  
  3.         String value = "";  
  4.         if(null==cell){  
  5.             return value;  
  6.         }  
  7.         switch (cell.getCellType()) {  
  8.         //數(shù)值型  
  9.         case Cell.CELL_TYPE_NUMERIC:  
  10.             if (HSSFDateUtil.isCellDateFormatted(cell)) {  
  11.                 //如果是date類型則 ,獲取該cell的date值  
  12.                 Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());  
  13.                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  14.                 value = format.format(date);;  
  15.             }else {// 純數(shù)字  
  16.                 BigDecimal big=new BigDecimal(cell.getNumericCellValue());  
  17.                 value = big.toString();  
  18.                 //解決1234.0  去掉后面的.0  
  19.                 if(null!=value&&!"".equals(value.trim())){  
  20.                      String[] item = value.split("[.]");  
  21.                      if(1<item.length&&"0".equals(item[1])){  
  22.                          value=item[0];  
  23.                      }  
  24.                 }  
  25.             }  
  26.             break;  
  27.             //字符串類型   
  28.         case Cell.CELL_TYPE_STRING:  
  29.             value = cell.getStringCellValue().toString();  
  30.             break;  
  31.         // 公式類型  
  32.         case Cell.CELL_TYPE_FORMULA:  
  33.             //讀公式計算值  
  34.             value = String.valueOf(cell.getNumericCellValue());  
  35.             if (value.equals("NaN")) {// 如果獲取的數(shù)據(jù)值為非法值,則轉換為獲取字符串  
  36.                 value = cell.getStringCellValue().toString();  
  37.             }  
  38.             break;  
  39.         // 布爾類型  
  40.         case Cell.CELL_TYPE_BOOLEAN:  
  41.             value = " "+ cell.getBooleanCellValue();  
  42.             break;  
  43.         // 空值  
  44.         case Cell.CELL_TYPE_BLANK:   
  45.             value = "";  
  46.             LogUtil.getLogger().error("excel出現(xiàn)空值");  
  47.             break;  
  48.         // 故障  
  49.         case Cell.CELL_TYPE_ERROR:   
  50.             value = "";  
  51.             LogUtil.getLogger().error("excel出現(xiàn)故障");  
  52.             break;  
  53.         default:  
  54.             value = cell.getStringCellValue().toString();  
  55.     }  
  56.     if("null".endsWith(value.trim())){  
  57.         value="";  
  58.     }  
  59.   return value;  
  60.     }  

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多