<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    好好生活,努力工作,天天向上!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks
         Apache POI是Apache軟件基金會的開放源碼函式庫,用來幫助Java程序讀寫Microsoft Office的格式檔案。POI提供了下面這幾種類型對Microsoft Office的格式檔案進行解析:

          HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。

          XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。

          HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能。

          HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。

          HDGF - 提供讀Microsoft Visio格式檔案的功能。

          HPBF - 提供讀Microsoft Publisher格式檔案的功能。  

       你可以訪問POI的主頁http://poi.apache.org/ 下載你喜歡的版本和了解更多的信息.

       這里只介紹使用POI讀取Excel文件,在讀取Excel時首先要定位Excel文件的位置,然后通過POI的API生成一個工作表HSSFWorkbook對象:

        File file = new File(filePath);
        FileInputStream fint 
    = new
     FileInputStream(file);
        POIFSFileSystem poiFileSystem 
    = new
     POIFSFileSystem(fint);
        HSSFWorkbook workbook 
    = new
     HSSFWorkbook(poiFileSystem);

       可以通過HSSFWorkbook提供的getSheetAt(int sheetNum)訪問對應的子工作表HSSFSheet,序號從'0'開始.在獲得HSSFSheet對象后通過sheet.getRow(rowNum)方法獲得子工作表的指定行HSSFRow,HSSFRow提供了getCell(short)方法訪問其中的單元格對象.在處理單元格的時候要注意,不能簡單使用HSSShellgetStringCellValue()方法獲得單元格中的值,在我使用的版本中(2.0)沒有提供自動類型轉換的功能,所以在取值的時候要根據類型判斷:
    public static String getCell(HSSFCell cell) {
            
    if (cell == null
    )
                
    return ""
    ;
            
    switch
     (cell.getCellType()) {
              
    case
     HSSFCell.CELL_TYPE_NUMERIC:
                  
    return cell.getNumericCellValue() + ""
    ;
              
    case
     HSSFCell.CELL_TYPE_STRING:
                  
    return
     cell.getStringCellValue();
              
    case
     HSSFCell.CELL_TYPE_FORMULA:
                  
    return
     cell.getCellFormula();
              
    case
     HSSFCell.CELL_TYPE_BLANK:
                  
    return ""
    ;
              
    case
     HSSFCell.CELL_TYPE_BOOLEAN:
                  
    return cell.getBooleanCellValue() + ""
    ;
              
    case
     HSSFCell.CELL_TYPE_ERROR:
                 
    return cell.getErrorCellValue() + ""
    ;
             }
             
    return ""
    ;
          }

       HSSFCell沒有提供時間類型常量,這時候你只能根據自己判斷是否要將它轉換成時間格式了: cell.getDateCellValue();      

       下面是一個簡單的例子,你可以參考一下:

    /**
     *  打印Excel文件 。 
     * 
    @author vwpolo
     * <p>2009-9-15</p>
     
    */

    public class PrintExcelTest {

      
    public static void main(String[] args) throws
     Exception {
        File file 
    = new File("User.xls"
    );
        FileInputStream fint 
    = new
     FileInputStream(file);
        POIFSFileSystem poiFileSystem 
    = new
     POIFSFileSystem(fint);
        HSSFWorkbook workbook 
    = new
     HSSFWorkbook(poiFileSystem);
        HSSFSheet sheet 
    = workbook.getSheetAt(0
    );
        HSSFRow rowTitle 
    = sheet.getRow(0
    );
        Iterator
    <HSSFCell> iterTitle =
     rowTitle.cellIterator();
        
    while
    (iterTitle.hasNext()) {
          System.out.print(iterTitle.next().getStringCellValue()
    +"  "
    );
        }
        System.out.println(
    ""
    );
        HSSFRow rowUser 
    = sheet.getRow(1
    );
        Iterator
    <HSSFCell> iterUser =
     rowUser.cellIterator();
        
    while
    (iterUser.hasNext()) {
          System.out.print(getCell(iterUser.next())
    +"  "
    );
        }
        System.out.println(
    "\n"
    );
        System.out.println(
    "出生日期:"+rowUser.getCell((short)3
    ).getDateCellValue().toLocaleString());
      }
      
      
    public static
     String getCell(HSSFCell cell) {
        
    if (cell == null
    )
          
    return ""
    ;
        
    switch
     (cell.getCellType()) {
          
    case
     HSSFCell.CELL_TYPE_NUMERIC:
            
    return cell.getNumericCellValue() + ""
    ;
          
    case
     HSSFCell.CELL_TYPE_STRING:
            
    return
     cell.getStringCellValue();
          
    case
     HSSFCell.CELL_TYPE_FORMULA:
            
    return
     cell.getCellFormula();
          
    case
     HSSFCell.CELL_TYPE_BLANK:
            
    return ""
    ;
          
    case
     HSSFCell.CELL_TYPE_BOOLEAN:
            
    return cell.getBooleanCellValue() + ""
    ;
          
    case
     HSSFCell.CELL_TYPE_ERROR:
            
    return cell.getErrorCellValue() + ""
    ;
        }
        
    return ""
    ;
      }
    }
       這里的User.xls文件時一個模板,

     

       A1C1的單元格格式是常規(guī)格式,B1E1的單元格格式是文本,D1的單元格格式是日期

       運行上面的例子會輸出:

     姓名  員工編號  所屬公司  出生日期  身份證號碼  
     張三  
    000018   上海      32117.0   370684198712066666
      

     出生日期:1987-12-6 0:00:00
        在那個迭代方法中無法對日期類型的判斷,所以輸出格式存在問題,可以將日期格式額外處理。
    posted on 2009-09-16 08:08 VWPOLO 閱讀(6290) 評論(7)  編輯  收藏 所屬分類: Java 技術Open Source

    Feedback

    # re: 使用Apache POI讀取Excel文件 2009-09-16 08:17 sorcerer
    記得以前的poi讀取某些excel文件時會讓jvm直接崩潰的.  回復  更多評論
      

    # re: 使用Apache POI讀取Excel文件 2009-09-16 08:38 VWPOLO
    @sorcerer
    現在好像沒有碰到這種情況,估計你使用的版本有問題吧,我這是為公司人事部提供的員工信息導入功能,差不多每次導入的數據都在500條左右。  回復  更多評論
      

    # re: 使用Apache POI讀取Excel文件 2009-09-16 11:36 sy
    500條很多么,我們至少是1萬以上,poi在處理大量數據是確實不怎么樣  回復  更多評論
      

    # re: 使用Apache POI讀取Excel文件 2009-09-16 12:43 Tomdog
    @sy
    微軟都不開源的,他的格式鬼才知道怎么高效解析,poi能用java做到這地步還是免費的已經是nb哄哄了  回復  更多評論
      

    # re: 使用Apache POI讀取Excel文件 2009-09-16 16:13 99書城
    是的速度發(fā)生點擊附件多舒服  回復  更多評論
      

    # re: 使用Apache POI讀取Excel文件 2009-09-16 19:44 cxh8318
    用poi導入幾千條是沒有問題的  回復  更多評論
      

    # re: 使用Apache POI讀取Excel文件 2009-09-18 09:33 DMC
    Excel畢竟都發(fā)展二十多年了,要完全兼容本來就很困難。微軟雖然讓人看很不順眼,但他們的程序員可不是吃飽了撐著的。

    另,微軟其實有公開doc,xls,ppt的文件格式。不然POI可能還做不到現在的程度。

    http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx  回復  更多評論
      

    主站蜘蛛池模板: 国产国产成年年人免费看片| 亚洲精品视频在线看| 国产精品亚洲а∨天堂2021| 亚洲精品国产综合久久一线| 亚洲免费在线视频| 亚洲精品无码中文久久字幕| 国产亚洲精品a在线观看| 57pao一国产成视频永久免费| 可以免费看黄的网站| 日韩在线视精品在亚洲| 免费爱爱的视频太爽了| 91视频免费观看高清观看完整| 日日操夜夜操免费视频| 色噜噜亚洲男人的天堂| 亚洲国产成人久久笫一页| 1000部啪啪未满十八勿入免费| 野花视频在线官网免费1| 国产亚洲福利一区二区免费看| 亚洲AV无码专区在线亚| 亚洲男女内射在线播放| 噼里啪啦免费观看高清动漫4| a在线视频免费观看在线视频三区| 亚洲一区日韩高清中文字幕亚洲| xxxx日本免费| 久久精品免费网站网| 国产V亚洲V天堂无码久久久| 扒开双腿猛进入爽爽免费视频| 成人性做爰aaa片免费看| 精品亚洲福利一区二区| 亚洲最新中文字幕| 无码人妻精品一二三区免费| 最好免费观看高清在线| 无遮挡呻吟娇喘视频免费播放| 亚洲精品综合在线影院| 亚洲日本中文字幕区| 亚洲色无码专区在线观看| 91制片厂制作传媒免费版樱花| 亚洲AV色吊丝无码| 亚洲人成在线影院| 亚洲日韩一页精品发布| 亚洲国产成人久久笫一页|