<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  回復  更多評論
      

    主站蜘蛛池模板: 18禁超污无遮挡无码免费网站 | 99热在线观看免费| 亚洲精品国产第一综合99久久| 好看的电影网站亚洲一区| 国产片免费福利片永久| 黄在线观看www免费看| 成人国产精品免费视频| 鲁啊鲁在线视频免费播放| 亚洲AV综合永久无码精品天堂| 亚洲精品V欧洲精品V日韩精品| 国产男女猛烈无遮挡免费网站| 特a级免费高清黄色片| 亚洲熟妇丰满xxxxx| 亚洲黄色在线网站| 久久亚洲国产中v天仙www| 亚洲精品无码久久久久AV麻豆| 免费观看美女裸体网站| 日韩欧美一区二区三区免费观看 | 亚洲伦乱亚洲h视频| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久免费区一区二区三波多野| 国产福利免费视频 | 妞干网在线免费观看| 动漫黄网站免费永久在线观看| 最近2019中文字幕免费大全5| 四虎影视成人永久免费观看视频| a毛片在线免费观看| 成人网站免费大全日韩国产 | 亚洲成AV人片在线观看无| 亚洲午夜福利在线观看| 亚洲中文字幕无码永久在线| 国产亚洲成人久久| 在线观看亚洲天天一三视| 亚洲色自偷自拍另类小说| 国产精品亚洲w码日韩中文| 亚洲精品无码永久中文字幕| 亚洲男人的天堂www| 亚洲国产综合精品中文第一区| 夜夜亚洲天天久久| 久久精品国产亚洲AV高清热|