实际开发中,用到最多的是把数据库中数据导出生成报表,尤其是在生产管理或者财务系统中用的非常普遍。生成报表格式一般是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文件