POI操作Excel文件-基礎篇

passport_daizi發表於2012-06-12
一.POI簡介

Jakarta POI 是apache的子專案,目標是處理ole2物件。它提供了一組操縱Windows文件的Java API

目前比較成熟的是HSSF介面,處理MS Excel(97-2002)物件。它不象我們僅僅是用csv生成的沒有格式的可以由Excel轉換的東西,而是真正的Excel物件,你可以控制一些屬性如sheet,cell等等。

二.HSSF概況

HSSF 是Horrible SpreadSheet Format的縮寫,也即“討厭的電子表格格式”。 也許HSSF的名字有點滑稽,就本質而言它是一個非常嚴肅、正規的API。通過HSSF,你可以用純Java程式碼來讀取、寫入、修改Excel檔案。

HSSF 為讀取操作提供了兩類API:usermodel和eventusermodel,即“使用者模型”和“事件-使用者模型”。前者很好理解,後者比較抽象,但操作效率要高得多。

三.開始編碼


1 . 準備工作

要求:JDK 1.4+POI開發包

可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包

2 . EXCEL 結構

HSSFWorkbook excell 文件物件介紹
HSSFSheet excell的表單
HSSFRow excell的行
HSSFCell excell的格子單元
HSSFFont excell字型
HSSFName 名稱
HSSFDataFormat 日期格式
在poi1.7中才有以下2項:
HSSFHeader sheet頭
HSSFFooter sheet尾
和這個樣式
HSSFCellStyle cell樣式
輔助操作包括
HSSFDateUtil 日期
HSSFPrintSetup 列印
HSSFErrorConstants 錯誤資訊表

3 .具體用法例項 (採用 usermodel )


如何讀Excel

讀取Excel檔案時,首先生成一個POIFSFileSystem物件,由POIFSFileSystem物件構造一個HSSFWorkbook,該HSSFWorkbook物件就代表了Excel文件。下面程式碼讀取上面生成的Excel檔案寫入的訊息字串:
Java程式碼 複製程式碼 收藏程式碼
  1. POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:\test.xls"));    
  2. HSSFWorkbook  wb = new HSSFWorkbook(fs);    
  3.   } catch (IOException e) {    
  4.   e.printStackTrace();    
  5.   }    
  6.   HSSFSheet sheet = wb.getSheetAt(0);    
  7.   HSSFRow row = sheet.getRow(0);    
  8.   HSSFCell cell = row.getCell((short0);    
  9.   String msg = cell.getStringCellValue();   
POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:\test.xls")); 
HSSFWorkbook  wb = new HSSFWorkbook(fs); 
  } catch (IOException e) { 
  e.printStackTrace(); 
  } 
  HSSFSheet sheet = wb.getSheetAt(0); 
  HSSFRow row = sheet.getRow(0); 
  HSSFCell cell = row.getCell((short) 0); 
  String msg = cell.getStringCellValue(); 


如何寫excel,

將excel的第一個表單第一行的第一個單元格的值寫成“a test”。

Java程式碼 複製程式碼 收藏程式碼
  1. POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("workbook.xls"));    
  2.   
  3.     HSSFWorkbook wb = new HSSFWorkbook(fs);    
  4.   
  5.     HSSFSheet sheet = wb.getSheetAt(0);    
  6.   
  7.     HSSFRow row = sheet.getRow(0);    
  8.   
  9.     HSSFCell cell = row.getCell((short)0);    
  10.   
  11.     cell.setCellValue("a test");    
  12.   
  13.     // Write the output to a file    
  14.   
  15.     FileOutputStream fileOut = new FileOutputStream("workbook.xls");    
  16.   
  17.     wb.write(fileOut);    
  18.   
  19. fileOut.close();   
POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("workbook.xls")); 

    HSSFWorkbook wb = new HSSFWorkbook(fs); 

    HSSFSheet sheet = wb.getSheetAt(0); 

    HSSFRow row = sheet.getRow(0); 

    HSSFCell cell = row.getCell((short)0); 

    cell.setCellValue("a test"); 

    // Write the output to a file 

    FileOutputStream fileOut = new FileOutputStream("workbook.xls"); 

    wb.write(fileOut); 

fileOut.close(); 


4 . 可參考文件

POI 主頁:http://jakarta.apache.org/poi/,

初學者如何快速上手使用POI HSSF

http://jakarta.apache.org/poi/hssf/quick-guide.html 。

程式碼例子 http://blog.java-cn.com/user1/6749/archives/2005/18347.html


裡面有很多例子程式碼,可以很方便上手。

四.使用心得


POI HSSF 的usermodel包把Excel檔案對映成我們熟悉的結構,諸如Workbook、Sheet、Row、Cell等,它把整個結構以一組物件的形式儲存在記憶體之中,便於理解,操作方便,基本上能夠滿足我們的要求,所以說這個一個不錯的選擇。  

相關文章