差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

java:apache_poi:excel_helloworld [2013/02/25 13:38]
127.0.0.1 外部編輯
java:apache_poi:excel_helloworld [2023/06/25 09:48]
行 1: 行 1:
-{{tag>​java poi}} 
-====== Excel HelloWorld ====== 
-如果要將某些資料匯出成excel,常常會直接使用csv的格式,因為簡單、檔案小。但如果要做到如背景顏色、文字變化、套巨集等,csv格式就沒有那麼powerful。還好Apache POI非常的牛B,讓我們可以透過Java存取M$的東西。對工程師而言,說再多不如直接看程式碼,接下來我將透過一個簡單的範例教導大家該如何使用點POI皮毛。 
-===== 範例說明 ===== 
-我希望能夠產生如下圖的Excel檔案:​\\ 
-{{.:​poi_excel_helloworld.png?​600|}}\\ 
-主要實作以下特徵:​ 
-  - 產生Excel格式為xls 
-  - Sheet名稱為StockSummary 
-  - 第一行文字置中,其餘靠右 
-===== 實作說明 ===== 
-一個Excel檔案會對應到POI的Workbook,一個Workbook包含很多的Sheet,一個Sheet包含很多的Row,一個Row包含很多的Cell。而Cell可以透過CellStyle去決定想要顯示的樣式,包含字型(Font)、高度與寬度等。我分成三個步驟說明如何實作:​ 
-  - 建立一個Sheet名稱為StockSummary的xls 
-  - 建立資料內容 
-  - 設定置中與靠右 
-==== Create Sheet ==== 
-POI提供建立xls與xlsx方式,對應的Workbook實作分別為HSSFWorkbook與XSSFWorkbook;Sheet的部分可以透過Workbook去建立。最後再建立OutputStream並透過Workbook的write寫入檔案就可以產生一個最陽春xls格式的excel;讀取則要透過WorkbookFactory的create。 
-<code java> 
- static public void createHSSFWorkbook(String aFileName){ 
- Workbook wb = new HSSFWorkbook();​ 
- FileOutputStream fileOutputStream = null; 
- try { 
- wb.createSheet("​SimpleSheet"​);​ 
-  
- fileOutputStream = new FileOutputStream(aFileName);​ 
- wb.write(fileOutputStream);​ 
- } catch(Exception e){ 
- logger.error("",​ e); 
- } finally { 
- Cleaner.close(fileOutputStream);​ 
- } 
- } 
-</​code>​ 
-==== Create Content ==== 
-在建立Sheet後,我們可以透過它去建立Row。在Excel上看到的1,​2,​3,​4...就是Row,而A,​B,​C,​D為Collumn,Row與Collumn交會如1A就是Cell。POI提供Row與Cell的操作。如以下程式碼,我們僅需要指定要建立的Row與Cell index,就可以建立我們想要的Cell,接著再透過setCellValue設定目標值。目標值其實也包含許多格式,setCellValue有許多的Overloading,會根據你傳入的型態決定Excel中的格式。 
-<code java> 
- Row headRow = sheet.createRow(0);​ 
- String[] headerStr = { "​股號",​ "​年",​ "​月",​ "​開立發票總金額",​ "​營業收入淨額",​ "​合併營業收入淨額"​};​ 
- for( int i = 0 ; i < headerStr.length ; i++ ){ 
- Cell cell = headRow.createCell(i);​ 
- cell.setCellValue(headerStr[i]);​ 
-  
- } 
-  
- Row dataRow = sheet.createRow(1);​ 
- String[] DataStr = { "​1012",​ "​5",​ "​2",​ "​111,​111",​ "​222,​222",​ "​333,​333"​};​ 
- for( int i = 0 ; i < DataStr.length ; i++ ){ 
- Cell cell = dataRow.createCell(i);​ 
- cell.setCellValue(DataStr[i]);​ 
-  
- } 
-</​code>​ 
-==== Set Align ==== 
-在POI中,格式都是透過CellStyle去設定。為了達成我們的目標,我們需要建立Align Center與Align Right的CellStyle,最後在建立Cell後,再透過Cell的setCellStyle設定即可。 
-<code java> 
- CellStyle align_center_style = wb.createCellStyle();​ 
- align_center_style.setAlignment(CellStyle.ALIGN_CENTER);​ 
- align_center_style.setVerticalAlignment(CellStyle.ALIGN_CENTER);​ 
-  
- CellStyle align_right_style = wb.createCellStyle();​ 
- align_right_style.setAlignment(CellStyle.ALIGN_RIGHT);​ 
- align_right_style.setVerticalAlignment(CellStyle.ALIGN_RIGHT);​ 
-  
- Row headRow = sheet.createRow(0);​ 
- String[] headerStr = { "​股號",​ "​年",​ "​月",​ "​開立發票總金額",​ "​營業收入淨額",​ "​合併營業收入淨額"​};​ 
- for( int i = 0 ; i < headerStr.length ; i++ ){ 
- Cell cell = headRow.createCell(i);​ 
- cell.setCellValue(headerStr[i]);​ 
- cell.setCellStyle(align_center_style);​ 
- } 
-  
- Row dataRow = sheet.createRow(1);​ 
- String[] DataStr = { "​1012",​ "​5",​ "​2",​ "​111,​111",​ "​222,​222",​ "​333,​333"​};​ 
- for( int i = 0 ; i < DataStr.length ; i++ ){ 
- Cell cell = dataRow.createCell(i);​ 
- cell.setCellValue(DataStr[i]);​ 
- cell.setCellStyle(align_right_style);​ 
- } 
-</​code>​ 
  
-很簡單吧! 不可否認POI真的很牛B,就目前我所知的Excel功能它幾乎都實作了(也許是因為我知道的不多)! 之後有時間我再把常用的東西分享給大家!\\ 
-PS. 假如是很複雜的樣式,不如先建立樣版,再透過讀取接著建立的方式實作喔! 
- 
-=====    ===== 
----- 
-\\ 
-~~DISQUS~~