<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的單元格格式是常規格式,B1E1的單元格格式是文本,D1的單元格格式是日期

       運行上面的例子會輸出:

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

     出生日期:1987-12-6 0:00:00
        在那個迭代方法中無法對日期類型的判斷,所以輸出格式存在問題,可以將日期格式額外處理。
    posted on 2009-09-16 08:08 VWPOLO 閱讀(6281) 評論(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書城
    是的速度發生點擊附件多舒服  回復  更多評論
      

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

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

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

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

    主站蜘蛛池模板: 久久久精品国产亚洲成人满18免费网站 | 无码中文字幕av免费放dvd| 国产在线不卡免费播放| 亚洲一区二区三区免费观看| 99视频精品全部免费观看| 免费看国产精品3a黄的视频| 亚洲精品成a人在线观看| 亚洲一卡2卡3卡4卡5卡6卡| 88xx成人永久免费观看| 亚洲国产成人久久综合碰碰动漫3d| 一级毛片免费播放男男| 免费永久看黄在线观看app| 97久久国产亚洲精品超碰热| 国产免费人成视频在线播放播| 成人a视频片在线观看免费| 亚洲国产精品无码av| 国产成人1024精品免费| 不卡精品国产_亚洲人成在线| 免费观看亚洲人成网站| 免费国产小视频在线观看| 色噜噜噜噜亚洲第一| 国产在线观看免费不卡 | 久久国产免费直播| 久久影院亚洲一区| 国产精品无码亚洲一区二区三区| 性短视频在线观看免费不卡流畅| 国产嫩草影院精品免费网址| 色欲aⅴ亚洲情无码AV蜜桃| 中文字幕亚洲一区二区三区| 久久国产高潮流白浆免费观看| 亚洲日韩一区二区三区| 亚洲色成人WWW永久网站| 成人福利免费视频| 日韩电影免费在线观看网址| 久久久久久亚洲av成人无码国产| 久久久久国色AV免费看图片| 国产免费内射又粗又爽密桃视频| 激情综合亚洲色婷婷五月| 中文字幕亚洲日本岛国片| 国语成本人片免费av无码| 中文字幕免费人成乱码中国|