<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 閱讀(6279) 評論(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  回復  更多評論
      

    主站蜘蛛池模板: 久久亚洲AV无码精品色午夜麻豆 | 亚洲乱码中文字幕综合| 久久一区二区免费播放| 亚洲欧洲日韩国产综合在线二区| 青苹果乐园免费高清在线| 美景之屋4在线未删减免费| 亚洲AV福利天堂一区二区三| 久久久久久免费视频| 无码人妻一区二区三区免费视频| 亚洲国产精品国自产拍电影| 精品免费久久久久久成人影院| 中文字幕成人免费高清在线| 波多野结衣亚洲一级| 久久亚洲av无码精品浪潮| 国产精品视频免费观看| 四虎影视在线看免费观看| 亚洲精品在线免费看| 亚洲精品国产精品乱码不卞| 免费A级毛片无码A∨中文字幕下载| 亚洲精品乱码久久久久蜜桃 | 一级做a爰片久久毛片免费陪 | 亚洲精品美女在线观看| 亚洲精品一级无码鲁丝片 | 久久久久亚洲AV成人网| 三年片在线观看免费观看高清电影| 一区二区3区免费视频| 国产成人精品亚洲2020| 亚洲成a人片77777老司机| 亚洲精品成人网久久久久久| 成人免费无码大片A毛片抽搐色欲| 无码国产精品一区二区免费16| 国产成人亚洲午夜电影| 亚洲国产成人va在线观看网址| 亚洲精品字幕在线观看| 亚洲A∨午夜成人片精品网站| 国产香蕉免费精品视频| 成人性生交大片免费看中文| 免费大片av手机看片| 亚洲日韩AV一区二区三区四区| 亚洲黄色网址大全| 亚洲αv久久久噜噜噜噜噜|