1 package com.bjsxt.sxf.test;
2
3
4 import java.io.File;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.OutputStream;
9 import java.util.Date;
10
11 import org.apache.poi.hssf.usermodel.HSSFSheet;
12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
13 import org.apache.poi.hssf.util.CellRangeAddress;
14 import org.apache.poi.hssf.util.HSSFColor;
15 import org.apache.poi.ss.usermodel.Cell;
16 import org.apache.poi.ss.usermodel.CellStyle;
17 import org.apache.poi.ss.usermodel.CreationHelper;
18 import org.apache.poi.ss.usermodel.Font;
19 import org.apache.poi.ss.usermodel.IndexedColors;
20 import org.apache.poi.ss.usermodel.Row;
21 import org.apache.poi.ss.usermodel.Workbook;
22
23
24 /**
25 * 操作java代码生成execl表格
26 * @ClassName: JavaToExcel
27 * @Description: TODO(这里用一句话描述这个类的作用)
28 * @author 尚晓飞
29 * @date 2014-10-9 上午10:21:54
30 *
31 */
32 public class JavaToExcel {
33
34 public static void main(String[] args) throws IOException {
35 //创建Workbook对象(这一个对象代表着对应的一个Excel文件)
36 //HSSFWorkbook表示以xls为后缀名的文件
37 HSSFWorkbook wb=new HSSFWorkbook();
38 //获得CreationHelper对象,这个应该是一个帮助类
39 CreationHelper helper = wb.getCreationHelper();
40 //创建Sheet并给名字(表示Excel的一个Sheet)
41 HSSFSheet sheet1 = wb.createSheet("student01");
42 //Row表示一行Cell表示一列
43 Row row = null;
44 Cell cell = null;
45 for(int i=0;i<60;i++){
46 //获得这个sheet的第i行 (行是从0开始的,0是第一行)
47 row = sheet1.createRow(i);
48 //设置行长度自动
49 //row.setHeight((short)500);
50 row.setHeightInPoints(20);
51 //row.setZeroHeight(true);
52 for(int j=0;j<25;j++){
53 //设置每个sheet每一列的宽度,自动,根据内容的最大长度确定。
54 sheet1.autoSizeColumn(j, true);
55 //创建一个基本的样式
56 CellStyle cellStyle = JavaToExcel.createStyleCell(wb);
57 //获得这一行的每j列
58 cell = row.createCell(j);
59 if(j==0){
60 //设置文字在单元格里面的位置
61 cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_LEFT, CellStyle.VERTICAL_BOTTOM);
62 //先创建字体样式,并把这个样式加到单元格的字体里面
63 cellStyle.setFont(createFonts(wb));
64 //把这个样式加到单元格里面
65 cell.setCellStyle(cellStyle);
66 //给单元格设值
67 if(i%2==0){
68 cell.setCellValue("尚晓飞是个大坏蛋dsafdsagfdsgserthgfdhytjfdsadfdsagrea");
69 }else{
70 cell.setCellValue("尚晓飞是个大坏蛋");
71 }
72
73 }else if(j==1){
74 //设置文字在单元格里面的位置
75 cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
76 //设置这个样式的格式(Format)
77 cellStyle = JavaToExcel.setCellFormat(helper,cellStyle, "#,##0.0000");
78 //先创建字体样式,并把这个样式加到单元格的字体里面
79 cellStyle.setFont(createFonts(wb));
80 //把这个样式加到单元格里面
81 cell.setCellStyle(cellStyle);
82 //给单元格设值
83 cell.setCellValue(new Date());
84 }else if(j==2){
85 cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
86 cellStyle.setFont(createFonts(wb));
87 cell.setCellStyle(cellStyle);
88 cell.setCellValue(helper.createRichTextString("RichString"+i+j));
89 }else if(j==3){
90 cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
91 cellStyle = JavaToExcel.setCellFormat(helper,cellStyle, "MM-yyyy-dd");
92 cell.setCellStyle(cellStyle);
93 cell.setCellValue(new Date());
94 }else if(j==24){
95 cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
96 cellStyle.setFont(createFonts(wb));
97 //设置公式
98 cell.setCellFormula("SUM(E"+(i+1)+":X"+(i+1)+")");
99 }else{
100 cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
101 cellStyle = JavaToExcel.setFillBackgroundColors(cellStyle,IndexedColors.ORANGE.getIndex(),IndexedColors.ORANGE.getIndex(),CellStyle.SOLID_FOREGROUND);
102 cell.setCellStyle(cellStyle);
103 cell.setCellValue("");
104 }
105 }
106
107
108
109 }
110
111 //合并单元格
112 //参数含义:new CellRangeAddress(a, b, c,d)
113 //a和c:第几行 b和d是第几列 行和列的下标从0开始 0表示第一行或第一列
114 /**
115 * 重点注意事项:
116 1.单元格CELL和ROW对象下标都是从0开始的。
117 2.单元格合并时new CellRangeAddress(a, b, c,d)a的值的行号必须要比c的行号小,如果大于c就不能正常合并单元格
118 3.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。
119 */
120 sheet1.addMergedRegion(new CellRangeAddress(0, 0, 0,24));
121 Cell cell2=sheet1.getRow(0).getCell(0);
122 cell2.setCellValue("将java中的对象转换成execl表格并保存的表内容");
123
124
125 //输出
126 OutputStream os;
127 try {
128 os = new FileOutputStream(new File("c://JavaToExcel.xls"));
129 wb.write(os);
130 os.close();
131 } catch (FileNotFoundException e) {
132 // TODO Auto-generated catch block
133 e.printStackTrace();
134 }
135
136
137 }
138
139
140 /**
141 * 边框
142 * @param wb
143 * @return
144 */
145 public static CellStyle createStyleCell(Workbook wb){
146 CellStyle cellStyle = wb.createCellStyle();
147 //设置一个单元格边框样式
148 cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
149 cellStyle.setBorderTop(CellStyle.BORDER_THIN);
150 cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
151 cellStyle.setBorderRight(CellStyle.BORDER_THIN);
152 /**
153 *
154 CellStyle.BORDER_DOUBLE 双边线
155 CellStyle.BORDER_THIN 细边线
156 CellStyle.BORDER_MEDIUM 中等边线
157 CellStyle.BORDER_DASHED 虚线边线
158 CellStyle.BORDER_HAIR 小圆点虚线边线
159 CellStyle.BORDER_THICK 粗边线
160 */
161 //设置一个单元格边框颜色
162 cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
163 cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
164 cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
165 cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
166 return cellStyle;
167 }
168 /**
169 * 设置文字在单元格里面的位置
170 * CellStyle.ALIGN_CENTER
171 * CellStyle.VERTICAL_CENTER
172 * @param cellStyle
173 * @param halign
174 * @param valign
175 * @return
176 */
177 public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){
178 //设置上下
179 cellStyle.setAlignment(CellStyle.ALIGN_LEFT);
180 //设置左右
181 cellStyle.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM);
182 return cellStyle;
183 }
184 /**
185 * 格式化单元格
186 * 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找
187 * @param cellStyle
188 * @param fmt
189 * @return
190 */
191 public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){
192 //还可以用其它方法创建format
193 cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));
194 return cellStyle;
195 }
196 /**
197 * 前景和背景填充的着色
198 * @param cellStyle
199 * @param bg IndexedColors.ORANGE.getIndex();
200 * @param fg IndexedColors.ORANGE.getIndex();
201 * @param fp CellStyle.SOLID_FOREGROUND
202 * @return
203 */
204 public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){
205 //cellStyle.setFillBackgroundColor(bg);
206 cellStyle.setFillForegroundColor(fg);
207 cellStyle.setFillPattern(fp);
208 return cellStyle;
209 }
210 /**
211 * 设置字体
212 * @param wb
213 * @return
214 */
215 public static Font createFonts(Workbook wb){
216 //创建Font对象
217 Font font = wb.createFont();
218 //设置字体
219 font.setFontName("黑体");
220 //着色
221 font.setColor(HSSFColor.BLUE.index);
222 //斜体
223 font.setItalic(true);
224 //字体大小
225 font.setFontHeight((short)300);
226 return font;
227 }
228 }