poi操作
创建一个excel关联对象HSSFWorkbook:
1 |
HSSFWorkbook book = new
HSSFWorkbook(); |
创建一个sheet:
1 |
HSSFSheet st = book.createSheet( "sheet1" ); |
创建第i行:
1 |
HSSFRow row = st.createRow(i); |
创建第i行的j列:
1 |
HSSFCell cell = row.createCell(j); |
设置cell属性
给单元格设置边框属性:
1
2
3
4
5
6
7
8
9
10
11 |
HSSFCellStyle style = book.createCellStyle(); // 左右上下边框样式 style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 左右上下边框颜色(深蓝色),只有设置了上下左右边框以后给边框设置颜色才会生效 style.setLeftBorderColor(HSSFColor.BLACK.index); style.setRightBorderColor(HSSFColor.BLACK.index); style.setTopBorderColor(HSSFColor.BLACK.index); style.setBottomBorderColor(HSSFColor.BLACK.index); |
给单元格设置背景:
1
2 |
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 设置了背景色才有效果 style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); |
给单元格设置字体:
1
2
3 |
// 单元格字体 HSSFFont font = book.createFont(); font.setFontName( "宋体" ); |
设置字体以后,需要把字体加入到style中:
1 |
style.setFont(font); |
设置好单元格属性以后,需要这种属性的单元格就可以调用此style:
1 |
cell.setCellStyle(style); |
设置sheet表单的列宽:
1 |
st.setColumnWidth(i, cellWidths.get(i).intValue() * 160 ); |
列宽的设置方法在HSSFSheet中,方法参数:第一个参数表示第几列,从0开始数;第二个参数表示宽度为多少,大小由使用者调整。
合并单元格:
1 |
st.addMergedRegion( new
CellRangeAddress( 0 , 1 , 0 , keys.size() - 1 )); |
单元格合并方法也是在HSSFSheet中,方法参数:一个CellRangeAddress,该类构造函数的4个参数分别表示为:合并开始行,合并结束行,合并开始列,合并结束列
注:
合并方法最好写在最后面,不然有可能会影响到某些单元格添加单元格属性的操作
下面是我写的一个根据传入的数据,把数据导出到excel的接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 |
/** * 导出到excel 导出的路径以及导出文件名称在配置文件中定义 * 在任何地方此方法可以作为组件调用的,只需要提供需要保存的数据,每一列的属性,以及对应的中文名称,每一列的宽度,文件路径,文件名称 * * @param list * the data which will be saved to excel * @param keys * the key of the column * @param cnames * the name described in Chinese * @param cellWidths * the width of olumns * @param excelPath * the path of excel * @param fileName * the name of the file in server */ public
HSSFWorkbook doExportResults(List<Map<String, Object>> list, List<String> keys, List<String> cnames, List<Integer> cellWidths, String excelPath, String fileName) { File excel = new
File(excelPath); // 创建文件 String sheetName = fileName.substring( 0 , fileName.lastIndexOf( "." )); String dateStr = fileName.substring(fileName.indexOf( "_" ) + 1 , fileName.lastIndexOf( "." )); HSSFWorkbook book = new
HSSFWorkbook(); // 创建excel HSSFSheet st = book.createSheet(sheetName); // 第一行,标题 HSSFRow row = st.createRow( 0 ); HSSFCell cell = row.createCell( 0 ); cell.setCellValue(sheetName); // 单元格属性 第一行的属性在最后设置 HSSFCellStyle style = book.createCellStyle(); // 左右上下边框样式 style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 左右上下边框颜色(深蓝色) style.setLeftBorderColor(HSSFColor.BLACK.index); style.setRightBorderColor(HSSFColor.BLACK.index); style.setTopBorderColor(HSSFColor.BLACK.index); style.setBottomBorderColor(HSSFColor.BLACK.index); // 背景 style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 设置了背景色才有效果 style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // 单元格字体 HSSFFont font = book.createFont(); font.setFontName( "宋体" ); style.setFont(font); // 第二行,日期 row = st.createRow( 2 ); cell = row.createCell( 0 ); cell.setCellValue( "导出日期" ); cell = row.createCell( 1 ); cell.setCellValue(dateStr); //为日期行设置单元格属性 for
( int i = 0 ; i < keys.size(); i++) { if
(row.getCell(i) != null ) { cell = row.getCell(i); } else
{ cell = row.createCell(i); } cell.setCellStyle(style); } // 第三行,表头 row = st.createRow( 3 ); for
( int i = 0 ; i < keys.size(); i++) { cell = row.createCell(i); cell.setCellValue(cnames.get(i)); cell.setCellStyle(style); st.setColumnWidth(i, cellWidths.get(i).intValue() * 160 ); } for
( int i = 0 ; i < list.size(); i++) { // 创建每一行数据 row = st.createRow( 4
+ i); Map<String, Object> tmp = list.get(i); if
(tmp == null
|| tmp.isEmpty()) { continue ; } for
( int j = 0 ; j < keys.size(); j++) { // 设置每一行的每一个单元格的值 cell = row.createCell(j); cell.setCellStyle(style); Object obj = tmp.get(keys.get(j)); if
(obj == null ) { cell.setCellValue( "" ); } else
{ cell.setCellValue(obj.toString()); } } } // 合并单元格 HSSFCellStyle s1 = book.createCellStyle(); s1.cloneStyleFrom(style); s1.setAlignment(HSSFCellStyle.ALIGN_CENTER); s1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); s1.setWrapText( true ); s1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 设置了背景色才有效果 s1.setFillForegroundColor(HSSFColor.BROWN.index); HSSFFont fo = book.createFont(); fo.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); fo.setFontHeight(( short ) 350 ); fo.setFontName( "宋体" ); s1.setFont(fo); st.getRow( 0 ).getCell( 0 ).setCellStyle(s1); st.addMergedRegion( new
CellRangeAddress( 0 , 1 , 0 , keys.size() - 1 )); st.addMergedRegion( new
CellRangeAddress( 2 , 2 , 1 , keys.size() - 1 )); // 创建表格结束 FileOutputStream out = null ; try
{ if
(!excel.getParentFile().exists()) { System.out.println(excel.getParentFile().mkdirs()); } if
(!excel.exists()) { System.out.println(excel.createNewFile()); } out = new
FileOutputStream(excel); book.write(out); // 把excel写入到本地文件 } catch
(FileNotFoundException e) { logger.error( "导出到文件时找不到文件:"
+ e.getMessage()); } catch
(IOException e) { logger.error( "导出到文件时输出流错误:"
+ e.getMessage()); } finally
{ try
{ if
(out != null ) { out.close(); } } catch
(IOException e) { logger.error( "导出到文件时关闭输出流错误:"
+ e.getMessage()); } } return
book; } |
原文:http://www.cnblogs.com/God-froest/p/excel_1.html