一般的EXCEL導出使用POI先創建一個HSSFWorkbook,然后通過不斷創建HSSFRow,HSSFCell后設置單元格內容便可以完成導出。
這次在項目中需要用到模板,導出的內容包括(1.模板中的內容、樣式。2.自己需要新增的內容、樣式。),還需要設置單元格的樣式,在網上搜了一些blog,完成后記錄一下。
分析這次需求,最關鍵的就是如何獲取到填充了模板的新HSSFWorkbook,如果獲取到它,我們可以熟練的往里面添加內容。
1
2
3
|
File fi = new File("F:/usr/user.xls"); POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi)); HSSFWorkbook wb = new HSSFWorkbook(fs); |
這樣便可以獲取到我們熟悉的HSSFWorkbook對象了,操作熟悉的HSSFWorkbook對象想必爽歪歪了。這里還有一個需求,就是需要設置一些單元格的樣式,這在之前我也沒有接觸到過,記錄下來。
1
2
3
4
5
6
|
//生成單元格樣式 HSSFCellStyle cellStyle = wb.createCellStyle(); //wb是上一步創建的HSSFWorkbook對象 //設置背景顏色 cellStyle.setFillForegroundColor(HSSFColor.RED.index); //solid 填充 foreground 前景色 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); |
這樣便創建完成了一個單元格的樣式,接下來便是在特定的單元格添加樣式。
1
2
3
4
|
//獲取特定的單元格 HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); //設置樣式 cell.setCellStyle(cellStyle); //cellStyle是上一步創建的HSSFCellStyle對象 |
如此,整個需求基本完成。對于整個過程中需要用到的其他方法,這里寫了一個封裝類。
** 有些方法可能只適用此項目,使用時需要修改。
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
package com.pole.educate.excel; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.RichTextString; /** * 共分為六部完成根據模板導出excel操作:<br/> * 第一步、設置excel模板路徑(setSrcPath)<br/> * 第二步、設置要生成excel文件路徑(setDesPath)<br/> * 第三步、設置模板中哪個Sheet列(setSheetName)<br/> * 第四步、獲取所讀取excel模板的對象(getSheet)<br/> * 第五步、設置數據(分為6種類型數據:setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)<br/> * 第六步、完成導出 (exportToNewFile)<br/> * * @author Administrator * */ public class ExcelWriter { POIFSFileSystem fs = null ; HSSFWorkbook wb = null ; HSSFSheet sheet = null ; HSSFCellStyle cellStyle = null ; private String srcXlsPath = "" ; // excel模板路徑 private String desXlsPath = "" ; // 生成路徑 private String sheetName = "" ; /** * 第一步、設置excel模板路徑 * @param srcXlsPaths */ public void setSrcPath(String srcXlsPaths) { this .srcXlsPath = srcXlsPaths; } /** * 第二步、設置要生成excel文件路徑 * @param desXlsPaths * @throws FileNotFoundException */ public void setDesPath(String desXlsPaths) throws FileNotFoundException { this .desXlsPath = desXlsPaths; } /** * 第三步、設置模板中哪個Sheet列 * @param sheetName */ public void setSheetName(String sheetName) { this .sheetName = sheetName; } /** * 第四步、獲取所讀取excel模板的對象 */ public void getSheet() { try { File fi = new File(srcXlsPath); if (!fi.exists()){ //System.out.println("模板文件:"+srcXlsPath+"不存在!"); return ; } fs = new POIFSFileSystem( new FileInputStream(fi)); wb = new HSSFWorkbook(fs); sheet = wb.getSheet(sheetName); //生成單元格樣式 cellStyle = wb.createCellStyle(); //設置背景顏色 cellStyle.setFillForegroundColor(HSSFColor.RED.index); //solid 填充 foreground 前景色 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * */ public HSSFRow createRow( int rowIndex) { HSSFRow row = sheet.createRow(rowIndex); return row; } /** * */ public void createCell(HSSFRow row, int colIndex) { row.createCell(colIndex); } /** * 第五步、設置單元格的樣式 * @param rowIndex 行值 * @param cellnum 列值 */ public void setCellStyle( int rowIndex, int cellnum) { HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); cell.setCellStyle(cellStyle); } /** * 第五步、設置字符串類型的數據 * @param rowIndex 行值 * @param cellnum 列值 * @param value 字符串類型的數據 */ public void setCellStrValue( int rowIndex, int cellnum, String value) { if (value != null ) { HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } } /** * 第五步、設置日期/時間類型的數據 * @param rowIndex 行值 * @param cellnum 列值 * @param value 日期/時間類型的數據 */ public void setCellDateValue( int rowIndex, int cellnum, Date value) { HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** * 第五步、設置浮點類型的數據 * @param rowIndex 行值 * @param cellnum 列值 * @param value 浮點類型的數據 */ public void setCellDoubleValue( int rowIndex, int cellnum, double value) { HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** * 第五步、設置Bool類型的數據 * @param rowIndex 行值 * @param cellnum 列值 * @param value Bool類型的數據 */ public void setCellBoolValue( int rowIndex, int cellnum, boolean value) { HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** * 第五步、設置日歷類型的數據 * @param rowIndex 行值 * @param cellnum 列值 * @param value 日歷類型的數據 */ public void setCellCalendarValue( int rowIndex, int cellnum, Calendar value) { HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** * 第五步、設置富文本字符串類型的數據。可以為同一個單元格內的字符串的不同部分設置不同的字體、顏色、下劃線 * @param rowIndex 行值 * @param cellnum 列值 * @param value 富文本字符串類型的數據 */ public void setCellRichTextStrValue( int rowIndex, int cellnum, RichTextString value) { HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); cell.setCellValue(value); } /** * 第六步、完成導出 */ public void exportToNewFile() { FileOutputStream out; try { out = new FileOutputStream(desXlsPath); wb.write(out); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } |
以上這篇POI通過模板導出EXCEL文件的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/liufei-kuaile/p/7359609.html