10、借助POI實現Java生成並打印excel報表(1)


10.1、了解 Apache POI

      實際開發中,用到最多的是把數據庫中數據導出生成報表,尤其是在生產管理或者財務系統中用的非常普遍。生成報表格式一般是EXCEL或者PDF 。利用Apache  POI實現數據庫中數據導出生成excel報表。在java眾多數據導出excel報表的第三方jar包中POI相對來說比較好用。

       

      Apache POI 是用Java編寫的免費開源的跨平台 API,給Java提供對Microsoft Office格式檔案讀和寫的功能,創建和維護操作各種符合Office Open XML(OOXML)標准和微軟的OLE2復合文檔格式(OLE2)。借助POI,Java可以讀取、創建和修改MS Excel文件、MS Word文件及MSPowerPoint文件,其中office2003、2010均可以。下面是Apache POI 中提供的幾大部分的作用:

                             HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。

                             HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。

                             XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。

                             HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能。

                             HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。

                             HDGF - 提供讀Microsoft Visio格式檔案的功能。

                             HPBF - 提供讀Microsoft Publisher格式檔案的功能。

                             HSMF - 提供讀Microsoft Outlook格式檔案的功能。

創建一個excel報表步驟:                  

1. 創建新的Excel工作薄

HSSFWorkbook workbook = new HSSFWorkbook();

在Excel工作簿中建一工作表,其名為缺省值。POI中還提供了其他的一些workbook 構造方法。

2.創建一個工作表。新建一名為"工資表"的工作表:  

HSSFSheet sheet = workbook.createSheet("工資表"); 

3.創建行。在索引0的位置創建行(最頂端的行):  

HSSFRow row = sheet.createRow(0);

4.創建單元格。在索引0的位置創建單元格(左上端):  

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

            定義單元格為字符串類型(也可在創建單元格里面設置):

cell.setCellType(HSSFCell.CELL_TYPE_STRING); 

            在單元格中輸入一些內容: 

cell.setCellValue("增加值"); 

5.新建一輸出文件流,把相應的Excel工作簿輸出到本地

FileOutputStream fOut = new FileOutputStream(outputFile);

workbook.write(fOut);

fOut.flush();

             操作結束,關閉文件

fOut.close(); 

  在給單元格設置下從數據庫中讀取的數據。這樣就可以把數據庫里面的內容導入到excel了。

 

10.2、常用方法列舉:

對象種類:

HSSFWorkbook excell的文檔對象 

HSSFSheet excell的表單

HSSFRow excell的行

HSSFCell excell的格子單元

HSSFFont excell字體

HSSFName 名稱

HSSFDataFormat 日期格式 

常用方法:

1.合並單元格

 sheet.addMergedRegion(new Region(beginRowIndex , (short) beginColumnIndex , endRowIndex , (short) endColumnIndex ));

即從A行的B列,合並到C行的D列。可以理解為一塊面積。

2.設置頁腳

HSSFFooter foot = sheet.getFooter();

 

foot.setLeft("左邊文字:");

foot.setCenter("中間文字:");

foot.setRight(HSSFFooter.page()+"/"+HSSFFooter.numPages());//顯示的為:當前頁/總頁數。如:1/3

3.生成Excel的思想

靈活應用java提供的數據結構(List,Map,Set)。通常習慣把每個sheet定義為一個Map元素.即:

Map<sheet名,數據集合>.  至於數據集合,則可根據實際情況組成相應的數據結構。總之,靈活應用數據結構: 生成Excel的邏輯可擴展性相當好,而且擴展起來甚是方便,並可以在一定程序上實現Excel的動態化。

樣式示例:(整數型、浮點型、布爾型、字符串型、日期格式、中西文結合式)

 1 import org.apache.poi.hssf.usermodel.*;  
 2 import java.io.FileOutputStream;  
 3 import java.io.IOException;  
 4 publicclass CreateCells  
 5 {  
 6 publicstaticvoid main(String[] args)  
 7 throws IOException  
 8 {  
 9 HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook對象
10 HSSFSheet sheet = wb.createSheet("new sheet");//建立新的sheet對象
11 // Create a row and put some cells in it. Rows are 0 based.
12 HSSFRow row = sheet.createRow((short)0);//建立新行
13 // Create a cell and put a value in it.
14 HSSFCell cell = row.createCell((short)0);//建立新cell
15 cell.setCellValue(1);//設置cell的整數類型的值
16 // Or do it on one line.
17 row.createCell((short)1).setCellValue(1.2);//設置cell浮點類型的值
18 row.createCell((short)2).setCellValue("test");//設置cell字符類型的值
19 row.createCell((short)3).setCellValue(true);//設置cell布爾類型的值
20 HSSFCellStyle cellStyle = wb.createCellStyle();//建立新的cell樣式
21 cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));//設置cell樣式為定制的日期格式
22 HSSFCell dCell =row.createCell((short)4);  
23 dCell.setCellValue(new Date());//設置cell為日期類型的值
24 dCell.setCellStyle(cellStyle); //設置該cell日期的顯示格式
25 HSSFCell csCell =row.createCell((short)5);  
26 csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//設置cell編碼解決中文高位字節截斷
27 csCell.setCellValue("中文測試_Chinese Words Test");//設置中西文結合字符串
28 row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建立錯誤cell
29 // Write the output to a file
30 FileOutputStream fileOut = new FileOutputStream("workbook.xls");  
31 wb.write(fileOut);  
32 fileOut.close();  
33 }  
34 } 

 

10.3、程序模塊

 在表格中間插入創建行:

1  public void createNewRow(){  
 2         //下移行的條件有2個:當前行非初始行,且當前行沒有超過最后一行  
 3         if(this.currRowIndex!=this.initRowIndex && this.lastRowIndex>this.currRowIndex){  
 4             //將指定的幾行進行下移一行  
 5             sheet.shiftRows(this.currRowIndex, this.lastRowIndex, 1, true, true);  
 6             //既然下移了那么最后一行下標就也要增大了  
 7             this.lastRowIndex++;  
 8         }  
 9         //在指定的行上創建一個空行(如果此行原本有單元格和數據,那么也會被空行覆蓋,且創建出來的空行是沒有單元格的)  
10         this.currRow = sheet.createRow(this.currRowIndex);  
11         this.currRow.setHeightInPoints(this.defaultRowHeight);  
12         this.currRowIndex++;  
13         this.currColIndex = this.initColIndex;  
14     }

單元格前(背)景色、(頂底左右)邊框及顏色、位置樣式設置:

 1 /**
 2      * 樣式設置
 3      */
 4     public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook){
 5         // *生成一個樣式
 6         HSSFCellStyle style = workbook.createCellStyle();
 7         // 設置這些樣式
 8         // 前景色
 9         style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
10         // 背景色
11         style.setFillBackgroundColor(HSSFColor.GREEN.index);
12         // 填充樣式
13         style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
14         // 設置底邊框
15         style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
16         // 設置底邊框顏色
17         style.setBottomBorderColor(HSSFColor.BLACK.index);
18         // 設置左邊框
19         style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
20         // 設置左邊框顏色
21             style.setLeftBorderColor(HSSFColor.BLACK.index);
22         // 設置右邊框
23         style.setBorderRight(HSSFCellStyle.BORDER_THIN);
24         // 設置右邊框顏色
25             style.setRightBorderColor(HSSFColor.BLACK.index);
26         // 設置頂邊框
27         style.setBorderTop(HSSFCellStyle.BORDER_THIN);
28         // 設置頂邊框顏色  
29             style.setTopBorderColor(HSSFColor.BLACK.index);
30             // 設置自動換行
31             style.setWrapText(false);
32             // 設置水平對齊的樣式為居中對齊
33             style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
34             // 設置垂直對齊的樣式為居中對齊
35             style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
36 //        HSSFFont font = createCellFont(workbook);
37 //        // 把字體應用到當前的樣式
38 //        style.setFont(font);
39         return style;
40     }

單元格字體樣式設置:

 1 /**
 2      * 字體設置
 3      */
 4     public static HSSFFont createCellFont(HSSFWorkbook workbook){
 5         // *生成一個字體
 6         HSSFFont font = workbook.createFont();
 7         // 字體顏色
 8         font.setColor(HSSFColor.VIOLET.index);
 9         // 字體大小
10         font.setFontHeightInPoints((short) 12);
11         // 字體加粗
12         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
13         // 是否使用斜體
14         font.setItalic( true );
15         // 是否使用划線
16         //font.setStrikeout(true);
17         // 字體名字
18         font.setFontName( " 黑體 " );
19         return font;
20     }

保留小數位數樣式設置:

1 /**
2  * 保留2位小數
3  */
4  HSSFCellStyle cellStyle = workbook.createCellStyle();
5  Short doubleFormat = workbook.createDataFormat().getFormat("0.00");
6  cellStyle.setDataFormat(doubleFormat);
7  cellStyle.setDataFormat(doubleFormat);

 

注釋設置:

 1 /**
 2  * 注釋設置
 3  */
 4 public static HSSFComment createCellComment(HSSFPatriarch patriarch, String commentText, String commentName){
 5    // *添加單元格注釋
 6    // 定義注釋的大小和位置,詳見文檔
 7    HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 1, 1, (short) 2, 2));
 8    // 設置注釋內容
 9    comment.setString(new HSSFRichTextString(commentText));
10    // 設置注釋作者,當鼠標移動到單元格上是可以在狀態欄中看到該內容.
11    comment.setAuthor(commentName);
12    return comment;
13 }

圖片插入設置:

 1 /**
 2      * 圖片插入
 3      */
 4     public static void createCellPicture(HSSFWorkbook workbook, HSSFPatriarch patriarch, String url, int col, int row) throws Exception{
 5         //先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray
 6         BufferedImage bufferImg =null;
 7         ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
 8         bufferImg = ImageIO.read(new File( url )); 
 9         ImageIO.write(bufferImg,"jpg",byteArrayOut);
10         HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,1023, 255, (short) col, row, (short) col, row);
11         anchor.setAnchorType(3);
12         //插入圖片
13         patriarch.createPicture(anchor , workbook.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
14         byteArrayOut.flush();
15         byteArrayOut.close();
16     }

 

10.4、實例:

報表生成類:ComplexExportExcelClient.java

1 package com.bzu.search.action;  
  2  
  3 import java.util.ArrayList;  
  4 import java.util.List;  
  5  
  6 import org.apache.poi.hssf.usermodel.HSSFCell;  
  7 import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
  8 import org.apache.poi.hssf.usermodel.HSSFFont;  
  9 import org.apache.poi.hssf.usermodel.HSSFRichTextString;  
 10 import org.apache.poi.hssf.usermodel.HSSFRow;  
 11 import org.apache.poi.hssf.usermodel.HSSFSheet;  
 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
 13 import org.apache.poi.hssf.util.Region;  
 14  
 15 /**  
 16  * 拒絕件報表生成類.  
 17  *   
 18  * @author caoyb  
 19  * @version $Revision:$  
 20  */ 
 21 public class ComplexExportExcelClient {  
 22  
 23     private static HSSFWorkbook wb = new HSSFWorkbook();  
 24  
 25     private static HSSFSheet sheet = wb.createSheet();  
 26  
 27     @SuppressWarnings({ "unchecked", "deprecation" })  
 28     public static void main(String[] args) {  
 29  
 30         ExportExcel exportExcel = new ExportExcel(wb, sheet);  
 31  
 32         // 創建列標頭LIST  
 33         List fialList = new ArrayList();  
 34  
 35         fialList.add("申請人未提供任何聯系方式");  
 36         fialList.add("無工作單位信息且未提供收入來源信息");  
 37         fialList.add("有工作單位但未提供單位地址或電話");  
 38         fialList.add("家庭地址缺失");  
 39         fialList.add("客戶身份證明資料缺");  
 40         fialList.add("簽名缺失或簽名不符合要求");  
 41         fialList.add("其它");  
 42  
 43         List errorList = new ArrayList();  
 44  
 45         errorList.add("客戶主動取消");  
 46         errorList.add("個人征信不良");  
 47         errorList.add("欺詐申請");  
 48         errorList.add("申請人基本條件不符");  
 49         errorList.add("申請材料不合規");  
 50         errorList.add("無法正常完成征信");  
 51         errorList.add("重復申請");  
 52         errorList.add("其他");  
 53  
 54         // 計算該報表的列數  
 55         int number = 2 + fialList.size() * 2 + errorList.size() * 2;  
 56  
 57         // 給工作表列定義列寬(實際應用自己更改列數)  
 58         for (int i = 0; i < number; i++) {  
 59             sheet.setColumnWidth(i, 3000);  
 60         }  
 61  
 62         // 創建單元格樣式  
 63         HSSFCellStyle cellStyle = wb.createCellStyle();  
 64  
 65         // 指定單元格居中對齊  
 66         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
 67  
 68         // 指定單元格垂直居中對齊  
 69         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
 70  
 71         // 指定當單元格內容顯示不下時自動換行  
 72         cellStyle.setWrapText(true);  
 73  
 74         // 設置單元格字體  
 75         HSSFFont font = wb.createFont();  
 76         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
 77         font.setFontName("宋體");  
 78         font.setFontHeight((short) 200);  
 79         cellStyle.setFont(font);  
 80  
 81         // 創建報表頭部  
 82         exportExcel.createNormalHead("南京地區申請資料拒件分析統計", number);  
 83  
 84         // 設置第二行  
 85         String[] params = new String[] { "    年  月  日", "  年  月  日" };  
 86         exportExcel.createNormalTwoRow(params, number);  
 87  
 88         // 設置列頭  
 89         HSSFRow row2 = sheet.createRow(2);  
 90  
 91         HSSFCell cell0 = row2.createCell(0);  
 92         cell0.setCellStyle(cellStyle);  
 93         cell0.setCellValue(new HSSFRichTextString("機構代碼"));  
 94  
 95         HSSFCell cell1 = row2.createCell(1);  
 96         cell1.setCellStyle(cellStyle);  
 97         cell1.setCellValue(new HSSFRichTextString("支行名稱"));  
 98  
 99         HSSFCell cell2 = row2.createCell(2);  
100         cell2.setCellStyle(cellStyle);  
101         cell2.setCellValue(new HSSFRichTextString("無效件"));  
102  
103         HSSFCell cell3 = row2.createCell(2 * fialList.size() + 2);  
104         cell3.setCellStyle(cellStyle);  
105         cell3.setCellValue(new HSSFRichTextString("拒絕件"));  
106  
107         HSSFRow row3 = sheet.createRow(3);  
108  
109         // 設置行高  
110         row3.setHeight((short) 800);  
111  
112         HSSFCell row3Cell = null;  
113         int m = 0;  
114         int n = 0;  
115  
116         // 創建不同的LIST的列標題  
117         for (int i = 2; i < number; i = i + 2) {  
118  
119             if (i < 2 * fialList.size() + 2) {  
120                 row3Cell = row3.createCell(i);  
121                 row3Cell.setCellStyle(cellStyle);  
122                 row3Cell.setCellValue(new HSSFRichTextString(fialList.get(m)  
123                         .toString()));  
124                 m++;  
125             } else {  
126                 row3Cell = row3.createCell(i);  
127                 row3Cell.setCellStyle(cellStyle);  
128                 row3Cell.setCellValue(new HSSFRichTextString(errorList.get(n)  
129                         .toString()));  
130                 n++;  
131             }  
132  
133         }  
134  
135         // 創建最后一列的合計列  
136         row3Cell = row3.createCell(number);  
137         row3Cell.setCellStyle(cellStyle);  
138         row3Cell.setCellValue(new HSSFRichTextString("合計"));  
139  
140         // 合並單元格  
141         HSSFRow row4 = sheet.createRow(4);  
142  
143         // 合並第一列的 第三行到第五行
144         sheet.addMergedRegion(new Region(2, (short) 0, 4, (short) 0));  
145  
146         // 合並第二行的 第三行到第五行
147         sheet.addMergedRegion(new Region(2, (short) 1, 4, (short) 1));  
148  
149         // 合並第三行的  第三列到第AA指定的列  
150         int aa = 2 * fialList.size() + 1;  
151         sheet.addMergedRegion(new Region(2, (short) 2, 2, (short) aa));  
152  
153         int start = aa + 1;  
154  
155         sheet.addMergedRegion(new Region(2, (short) start, 2,  
156                 (short) (number - 1)));  
157  
158         // 循環合並第四行的行,並且是每2列合並成一列  
159         for (int i = 2; i < number; i = i + 2) {  
160             sheet.addMergedRegion(new Region(3, (short) i, 3, (short) (i + 1)));  
161  
162         }  
163  
164         // 根據列數奇偶數的不同創建不同的列標題  
165         for (int i = 2; i < number; i++) {  
166             if (i < 2 * fialList.size() + 2) {  
167  
168                 if (i % 2 == 0) {  
169                     HSSFCell cell = row4.createCell(i);  
170                     cell.setCellStyle(cellStyle);  
171                     cell.setCellValue(new HSSFRichTextString("無效量"));  
172                 } else {  
173                     HSSFCell cell = row4.createCell(i);  
174                     cell.setCellStyle(cellStyle);  
175                     cell.setCellValue(new HSSFRichTextString("占比"));  
176                 }  
177             } else {  
178                 if (i % 2 == 0) {  
179                     HSSFCell cell = row4.createCell(i);  
180                     cell.setCellStyle(cellStyle);  
181                     cell.setCellValue(new HSSFRichTextString("拒絕量"));  
182                 } else {  
183                     HSSFCell cell = row4.createCell(i);  
184                     cell.setCellStyle(cellStyle);  
185                     cell.setCellValue(new HSSFRichTextString("占比"));  
186                 }  
187             }  
188  
189         }  
190  
191         // 循環創建中間的單元格的各項的值  
192         for (int i = 5; i < number; i++) {  
193             HSSFRow row = sheet.createRow((short) i);  
194             for (int j = 0; j <= number; j++) {  
195                 exportExcel  
196                         .cteateCell(wb, row, (short) j,  
197                                 HSSFCellStyle.ALIGN_CENTER_SELECTION, String  
198                                         .valueOf(j));  
199             }  
200  
201         }  
202  
203         // 創建最后一行的合計行  
204         String[] cellValue = new String[number - 1];  
205         for (int i = 0; i < number - 1; i++) {  
206             cellValue[i] = String.valueOf(i);  
207  
208         }  
209         exportExcel.createLastSumRow(1, cellValue);  
210  
211         exportExcel.outputExcel("c:\\拒絕件統計.xls");  
212  
213     }  
214 } 

 

EXCEL報表工具類:ExportExcel.java

  1 package com.bzu.search.action;  
  2  
  3 import java.io.File;  
  4 import java.io.FileNotFoundException;  
  5 import java.io.FileOutputStream;  
  6 import java.io.IOException;  
  7  
  8 import org.apache.poi.hssf.usermodel.HSSFCell;  
  9 import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
 10 import org.apache.poi.hssf.usermodel.HSSFFont;  
 11 import org.apache.poi.hssf.usermodel.HSSFRichTextString;  
 12 import org.apache.poi.hssf.usermodel.HSSFRow;  
 13 import org.apache.poi.hssf.usermodel.HSSFSheet;  
 14 import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
 15 import org.apache.poi.hssf.util.HSSFColor;  
 16 import org.apache.poi.hssf.util.Region;  
 17  
 18 /**  
 19  * EXCEL報表工具類.  
 20  *   
 21  * @author caoyb  
 22  * @version $Revision:$  
 23  */ 
 24 public class ExportExcel {  
 25  
 26     private HSSFWorkbook wb = null;  
 27  
 28     private HSSFSheet sheet = null;  
 29  
 30     /**  
 31      * @param wb  
 32      * @param sheet  
 33      */ 
 34     public ExportExcel(HSSFWorkbook wb, HSSFSheet sheet) {  
 35         super();  
 36         this.wb = wb;  
 37         this.sheet = sheet;  
 38     }  
 39  
 40     /**  
 41      * @return the sheet  
 42      */ 
 43     public HSSFSheet getSheet() {  
 44         return sheet;  
 45     }  
 46  
 47     /**  
 48      * @param sheet  
 49      *            the sheet to set  
 50      */ 
 51     public void setSheet(HSSFSheet sheet) {  
 52         this.sheet = sheet;  
 53     }  
 54  
 55     /**  
 56      * @return the wb  
 57      */ 
 58     public HSSFWorkbook getWb() {  
 59         return wb;  
 60     }  
 61  
 62     /**  
 63      * @param wb  
 64      *            the wb to set  
 65      */ 
 66     public void setWb(HSSFWorkbook wb) {  
 67         this.wb = wb;  
 68     }  
 69  
 70     /**  
 71      * 創建通用EXCEL頭部  
 72      *   
 73      * @param headString  
 74      *            頭部顯示的字符  
 75      * @param colSum  
 76      *            該報表的列數  
 77      */ 
 78     public void createNormalHead(String headString, int colSum) {  
 79  
 80         HSSFRow row = sheet.createRow(0);  
 81  
 82         // 設置第一行  
 83         HSSFCell cell = row.createCell(0);  
 84         row.setHeight((short) 400);  
 85  
 86         // 定義單元格為字符串類型  
 87         cell.setCellType(HSSFCell.ENCODING_UTF_16);  
 88         cell.setCellValue(new HSSFRichTextString("南京城區各網點進件統計報表"));  
 89  
 90         // 指定合並區域  
 91         sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) colSum));  
 92  
 93         HSSFCellStyle cellStyle = wb.createCellStyle();  
 94  
 95         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定單元格居中對齊  
 96         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定單元格垂直居中對齊  
 97         cellStyle.setWrapText(true);// 指定單元格自動換行  
 98  
 99         // 設置單元格字體  
100         HSSFFont font = wb.createFont();  
101         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
102         font.setFontName("宋體");  
103         font.setFontHeight((short) 300);  
104         cellStyle.setFont(font);  
105  
106         cell.setCellStyle(cellStyle);  
107     }  
108  
109     /**  
110      * 創建通用報表第二行  
111      *   
112      * @param params  
113      *            統計條件數組  
114      * @param colSum  
115      *            需要合並到的列索引  
116      */ 
117     public void createNormalTwoRow(String[] params, int colSum) {  
118         HSSFRow row1 = sheet.createRow(1);  
119         row1.setHeight((short) 300);  
120  
121         HSSFCell cell2 = row1.createCell(0);  
122  
123         cell2.setCellType(HSSFCell.ENCODING_UTF_16);  
124         cell2.setCellValue(new HSSFRichTextString("統計時間:" + params[0] + "至" 
125                 + params[1]));  
126  
127         // 指定合並區域  
128         sheet.addMergedRegion(new Region(1, (short) 0, 1, (short) colSum));  
129  
130         HSSFCellStyle cellStyle = wb.createCellStyle();  
131         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定單元格居中對齊  
132         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定單元格垂直居中對齊  
133         cellStyle.setWrapText(true);// 指定單元格自動換行  
134  
135         // 設置單元格字體  
136         HSSFFont font = wb.createFont();  
137         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
138         font.setFontName("宋體");  
139         font.setFontHeight((short) 250);  
140         cellStyle.setFont(font);  
141  
142         cell2.setCellStyle(cellStyle);  
143  
144     }  
145  
146     /**  
147      * 設置報表標題  
148      *   
149      * @param columHeader  
150      *            標題字符串數組  
151      */ 
152     public void createColumHeader(String[] columHeader) {  
153  
154         // 設置列頭  
155         HSSFRow row2 = sheet.createRow(2);  
156  
157         // 指定行高  
158         row2.setHeight((short) 600);  
159  
160         HSSFCellStyle cellStyle = wb.createCellStyle();  
161         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定單元格居中對齊  
162         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定單元格垂直居中對齊  
163         cellStyle.setWrapText(true);// 指定單元格自動換行  
164  
165         // 單元格字體  
166         HSSFFont font = wb.createFont();  
167         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
168         font.setFontName("宋體");  
169         font.setFontHeight((short) 250);  
170         cellStyle.setFont(font);  
171  
172         /*  
173          * cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單無格的邊框為粗體  
174          * cellStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 設置單元格的邊框顏色.  
175          * cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
176          * cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);  
177          * cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);  
178          * cellStyle.setRightBorderColor(HSSFColor.BLACK.index);  
179          * cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);  
180          * cellStyle.setTopBorderColor(HSSFColor.BLACK.index);  
181          */ 
182  
183         // 設置單元格背景色  
184         cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);  
185         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
186  
187         HSSFCell cell3 = null;  
188  
189         for (int i = 0; i < columHeader.length; i++) {  
190             cell3 = row2.createCell(i);  
191             cell3.setCellType(HSSFCell.ENCODING_UTF_16);  
192             cell3.setCellStyle(cellStyle);  
193             cell3.setCellValue(new HSSFRichTextString(columHeader[i]));  
194         }  
195  
196     }  
197  
198     /**  
199      * 創建內容單元格  
200      *   
201      * @param wb  
202      *            HSSFWorkbook  
203      * @param row  
204      *            HSSFRow  
205      * @param col  
206      *            short型的列索引  
207      * @param align  
208      *            對齊方式  
209      * @param val  
210      *            列值  
211      */ 
212     public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col, short align,  
213             String val) {  
214         HSSFCell cell = row.createCell(col);  
215         cell.setCellType(HSSFCell.ENCODING_UTF_16);  
216         cell.setCellValue(new HSSFRichTextString(val));  
217         HSSFCellStyle cellstyle = wb.createCellStyle();  
218         cellstyle.setAlignment(align);  
219         cell.setCellStyle(cellstyle);  
220     }  
221  
222     /**  
223      * 創建合計行  
224      *   
225      * @param colSum  
226      *            需要合並到的列索引  
227      * @param cellValue  
228      */ 
229     public void createLastSumRow(int colSum, String[] cellValue) {  
230  
231         HSSFCellStyle cellStyle = wb.createCellStyle();  
232         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定單元格居中對齊  
233         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定單元格垂直居中對齊  
234         cellStyle.setWrapText(true);// 指定單元格自動換行  
235  
236         // 單元格字體  
237         HSSFFont font = wb.createFont();  
238         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
239         font.setFontName("宋體");  
240         font.setFontHeight((short) 250);  
241         cellStyle.setFont(font);  
242  
243         HSSFRow lastRow = sheet.createRow((short) (sheet.getLastRowNum() + 1));  
244         HSSFCell sumCell = lastRow.createCell(0);  
245  
246         sumCell.setCellValue(new HSSFRichTextString("合計"));  
247         sumCell.setCellStyle(cellStyle);  
248         sheet.addMergedRegion(new Region(sheet.getLastRowNum(), (short) 0,  
249                 sheet.getLastRowNum(), (short) colSum));// 指定合並區域  
250  
251         for (int i = 2; i < (cellValue.length + 2); i++) {  
252             sumCell = lastRow.createCell(i);  
253             sumCell.setCellStyle(cellStyle);  
254             sumCell.setCellValue(new HSSFRichTextString(cellValue[i - 2]));  
255  
256         }  
257  
258     }  
259  
260     /**  
261      * 輸入EXCEL文件  
262      *   
263      * @param fileName  
264      *            文件名  
265      */ 
266     public void outputExcel(String fileName) {  
267         FileOutputStream fos = null;  
268         try {  
269             fos = new FileOutputStream(new File(fileName));  
270             wb.write(fos);  
271             fos.close();  
272         } catch (FileNotFoundException e) {  
273             e.printStackTrace();  
274         } catch (IOException e) {  
275             e.printStackTrace();  
276         }  
277     }  
278 } 

 運行上述兩段代碼你就會在c盤的根目錄下看到一個拒絕件統計.xls文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM