POI操作Excel詳解,讀取xls和xlsx格式的文件


package org.ian.webutil;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
 
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 
public class ReadExcel {
 
     private static final Log log = LogFactory.getLog(ReadExcel. class );
 
     
     /**
      * 判斷后綴分批入
      */
     private static void parseSUCCEXX(String realPath,String fileName){
         
         String [] pfix= fileName.split( "\\." );
         String suffix = pfix[pfix.length - 1 ];
         
         if ( suffix!= null &&!suffix.equals( "" )&&suffix.equals( "xls" )){
             
             System.out.println( "xls" );
             // jxl方法可讀取.xls格式
             jlxExcel(realPath,fileName);
         } else if (suffix .equals( "xlsx" )){
             
             System.out.println( "xlsx" );
             // poi方法可讀取Excel2007即.xlsx格式
             poiExcel(realPath,fileName);
         }
     }
     
     /**
      * 讀取 xls JXL
      * @param realPath
      * @param fileName
      */
     private static void jlxExcel(String realPath,String fileName){
             //===============jlx方法=================
             try {
             File fileDes = new File(realPath);
             InputStream str = new FileInputStream(fileDes);
             // 構造Workbook(工作薄)對象
             Workbook rwb=Workbook.getWorkbook(str);
             Sheet rs=rwb.getSheet( 0 ); //獲取第一張工作表
             int rsRows=rs.getRows(); //獲取Sheet表中所包含的總行數
             int rsCols=rs.getColumns(); //獲取Sheet表中所包含的總列數
             log.info( "========行========" +rsRows+ "=====列========" +rsCols);
             for ( int i= 1 ;i<rsRows;i++){ //讀取行
                 log.info( "========執行第========" +i+ "行" );
                 for ( int j= 0 ;j<rsCols;j++){
                     log.info( "========執行第========" +j+ "列" );
                     Cell coo=rs.getCell(j, i); //單元格定位列,再定位行
                     log.info( "========coo========" +coo);
                     String strc=coo.getContents(); //讀取內容
                     log.info( "========讀取內容strc========" +strc);
                     System.out.println( "文件" +fileName+ "的內容為:" +strc);
                 }
             }
             rwb.close(); 
             } catch (FileNotFoundException e) {  
                  e.printStackTrace();  
             } catch (BiffException e) {  
              e.printStackTrace();  
             } catch (IOException e) {  
              e.printStackTrace();  
             }  
                 
             //==========讀取excel文件內容=結束=====================
             
     }
     
     /**
      * POI讀取   xlsx
      * @param realPath
      * @param fileName
      */
     private static void poiExcel(String realPath,String fileName){
         try {
             File fileDes = new File(realPath);
             InputStream str = new FileInputStream(fileDes);
             XSSFWorkbook xwb = new XSSFWorkbook(str);  //利用poi讀取excel文件流
             XSSFSheet st = xwb.getSheetAt( 0 );  //讀取sheet的第一個工作表
             int rows=st.getLastRowNum(); //總行數
             int cols; //總列數
             log.info( "========行========" +rows);
             for ( int i= 0 ;i<rows;i++){
                 XSSFRow row=st.getRow(i); //讀取某一行數據
                 if (row!= null ){
                     //獲取行中所有列數據
                     cols=row.getLastCellNum();
                     log.info( "========行========" +rows+ "=====列========" +cols);
                 for ( int j= 0 ;j<cols;j++){
                     XSSFCell cell=row.getCell(j);
                     if (cell== null ){
                         System.out.print( "   " ); 
                     } else {
                     //判斷單元格的數據類型
                     switch (cell.getCellType()) { 
                         case XSSFCell.CELL_TYPE_NUMERIC: // 數字 
                             System.out.print(cell.getNumericCellValue() + "   " ); 
                             break
                         case XSSFCell.CELL_TYPE_STRING: // 字符串 
                             System.out.print(cell.getStringCellValue() + "   " ); 
                             break
                         case XSSFCell.CELL_TYPE_BOOLEAN: // Boolean 
                             System.out.println(cell.getBooleanCellValue() + "   " ); 
                             break
                         case XSSFCell.CELL_TYPE_FORMULA: // 公式 
                             System.out.print(cell.getCellFormula() + "   " ); 
                             break
                         case XSSFCell.CELL_TYPE_BLANK: // 空值 
                             System.out.println( "" ); 
                             break
                         case XSSFCell.CELL_TYPE_ERROR: // 故障 
                             System.out.println( "故障" ); 
                             break
                         default
                             System.out.print( "未知類型   " ); 
                             break
                        
                 }
                 }
                 }
             }
         } catch (IOException e){
             e.printStackTrace();  
         }
         
     }
 
     
     /**
      * test
      * @param args
      */
     public static void main(String[] args) {
         String fileName = "banShot.xlsx" ;
         String realPath = "d:/" +fileName;
         
         parseSUCCEXX(realPath, fileName);
         
     }
 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM