城市獵人

          在一網情深的日子里,誰能說得清是苦是甜,只知道確定了就義無反顧
          posts - 1, comments - 7, trackbacks - 0, articles - 89

          利用OPI讀取Excle文件

          Posted on 2009-09-02 13:44 sailor 閱讀(591) 評論(0)  編輯  收藏 所屬分類: java
          1、讀取文件
           /**
               * 導入方法
               * 
          @param request
               * 
          @return
               * 
          @throws Exception
               
          */

              
          public Message importCubage(HttpServletRequest request) throws Exception {
                  Message message 
          = MessageFactory.getMessage();
                  ServletContext context 
          = getServletContext();
                        
                  UploadListener listener 
          = new UploadListener(request, 30);
                  
          // Create a factory for disk-based file items
                  FileItemFactory factory = new MonitoredDiskFileItemFactory(listener);
                  
          // Create a new file upload handler
                  ServletFileUpload upload = new ServletFileUpload(factory);
                  
          try {
                      List items 
          = upload.parseRequest(request);
                      UserSession userSession 
          = UserSession.getUserSession(request
                              .getSession());
                      
          for (int i = 0; i < items.size(); i++{
                          FileItem fileItem 
          = (FileItem) items.get(i);
                          
          if (!fileItem.isFormField()) {
                              InputStream inputstream 
          = fileItem.getInputStream();
                              
          //讀取excle文件
                              this.getVolumeCorrenctionFactorService().saveExcleWorkBook(inputstream, userSession);
                             
                              message.addMessage(MessageUtils.operateSuccess());
                          }

                      }

                      
          return message;
                  }
           catch (FileUploadException e) {
                      
          throw new FileUploadException(e.getMessage());
                  }

              }


          2、讀取ExcleWorkBook
               /**
               * 讀取Excle
               * 
          @param is
               
          */

              
          public void saveExcleWorkBook(InputStream is, UserSession userSession){
                  Message message 
          = MessageFactory.getMessage();
                     
                  
          //通過得到的文件輸入流inputstream創建一個HSSFWordbook對象
                  try {
                      HSSFWorkbook hssfworkbook 
          = new HSSFWorkbook(is);
                      HSSFSheet hssfsheet 
          = null;
                      
          for (int i = 0; i < hssfworkbook.getNumberOfSheets(); i++{
                           hssfsheet 
          = hssfworkbook.getSheetAt(i);
                           
          this.readExcleSheet(hssfsheet, userSession);
                      }

                  }
           catch (IOException e) {
                      e.printStackTrace();
                      message.addMessage(
          "讀取Excle文件失敗!");
                  }
           
              }

          3、解析Excle
            /**
               * 讀取Sheet數據
               * 
          @param hssfsheet
               
          */

              
          private void readExcleSheet(HSSFSheet hssfsheet, UserSession userSession){
                  
                  
          //定義Sheet行
                  HSSFRow rows = null;
                  
          //定義列
                  HSSFCell cell = null;
                  
                  Double firstColumn;
                  
                  Double firstRow;
                  
                  List list 
          = new ArrayList();
                  
                  VolumeCorrenctionFactorVO vo 
          = null;

                   
          //遍歷該行所有的行,i表示行數 getPhysicalNumberOfRows行的總數
                  for (int i = 1; i < hssfsheet.getPhysicalNumberOfRows(); i++{         
                     rows 
          = hssfsheet.getRow(i);      

                     
          //獲取第i行,第0列的值
                     if(rows.getCell((short0).getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
                     
          {
                         firstColumn 
          = rows.getCell((short0).getNumericCellValue();
                     }
          else{
                         
          throw new BusinessException("Excle第" + (i+1+ "行,第" + "1列不是有效數字");
                     }

                     
                     
          //獲取第i行,第j列的值
                     for(short j = 1; j < hssfsheet.getRow(0).getLastCellNum(); j++ )
                     
          {
                         
          //獲取第0行,第j列的值             
                         if(hssfsheet.getRow(0).getCell(j).getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
                         
          {
                             firstRow 
          = hssfsheet.getRow(0).getCell(j).getNumericCellValue();
                         }
          else{
                             
          throw new BusinessException("Excle第1行,第" + (j + 1+ "列不是有效數字");
                         }

                         
                         
          //獲取第i行,第j個單元格
                         cell = rows.getCell(j); 
                         
                         
                         
          //判斷是否是數字
                         if (null == cell || cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
                         
          {
                             vo 
          = new VolumeCorrenctionFactorVO();
                             vo.setDensity(firstRow);
                             vo.setTemprature(firstColumn);
                             
          if(null != cell){
                                 Double cellContent 
          = cell.getNumericCellValue();
                                 vo.setVolumeFactor(cellContent);
                             }

                                 
                             list.add(vo);
                         }
          else{
                              
          throw new BusinessException("Excle第" + (i +  1+ "行,第" + (j + 1+ "列不是有效數字");
                         }

                     }

           
                  }

                  
                  
          if(list.size() > 0)
                  
          {
                      
          //構建批量插入SQL
                      String sql = this.buildSQL(list,userSession);
                      
                        
          //執行一次性插入多條SQL語句
                      this.volumeCorrenctionFactorDAO.getSqlExecutor().exectue(sql, null);
                  }

              }

          主站蜘蛛池模板: 栾城县| 壶关县| 原阳县| 襄汾县| 波密县| 天津市| 慈利县| 汤原县| 洛扎县| 泗洪县| 油尖旺区| 泰和县| 化隆| 海宁市| 上杭县| 广德县| 南陵县| 兴化市| 安国市| 巴林左旗| 灵璧县| 四平市| 巩留县| 榆林市| 当涂县| 墨江| 报价| 渭南市| 武城县| 本溪市| 龙里县| 怀仁县| 衡山县| 柞水县| 方城县| 岑巩县| 东丽区| 扬州市| 山东省| 盐津县| 望谟县|