码迷,mamicode.com
首页 > 其他好文 > 详细

poi实现Excel导出

时间:2014-06-03 09:03:22      阅读:381      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

最近做了一个导出Excel的小功能,以前没接触过,现在分享下自己的代码,想让各位帮忙看看有啥地方可以优化,也方便自己以后查阅...

首先是excelAction的代码:

bubuko.com,布布扣
 1 /**
 2  * excelAction
 3  * @author zhaoxz
 4  *
 5  */
 6 @Controller("excelAction")
 7 @Scope("prototype")
 8 public class ExcelAction extends BaseAction {
 9     /**
10      * 
11      */
12     private static final long serialVersionUID = -4596726723629076906L;
13     private static final Logger logger = Logger.getLogger(ExcelAction.class);
14     @Resource
15     private CkdjService ckdjSrv;
16     private ExportExcel ex = new ExportExcel();
17     private Ckdj ckdj;
18     private String exportBatch;
19     private String fileName;
20     private InputStream excelStream;
21     
22 
23     public String execute() throws Exception {
24         return SUCCESS;
25     }
26     
27     /**
28      * 将workbook转换为InputStream
29      * @param workbook
30      * @param fileName
31      */
32     private void workbookInputStream(HSSFWorkbook workbook, String fileName) {
33         try {
34             this.setFileName(URLEncoder.encode(fileName, "UTF-8"));
35             ByteArrayOutputStream baos = new ByteArrayOutputStream();
36             workbook.write(baos);
37             baos.flush();
38             byte[] aa = baos.toByteArray();
39             this.excelStream = new ByteArrayInputStream(aa, 0, aa.length);
40             baos.close();
41         } catch (Exception e) {
42             logger.error("转换失败!", e);
43         }
44     }
45 
46     /**************************** get set **************************************/
47 
48     /**
49      * 获取文件流
50      * @return
51      */
52     public InputStream getExcelStream() {
53         try {
54             String[] headers =  
55             { "序号", "名称", "规格", "序列号", "数量", "单位", "出库人"};
56             ckdj = ckdjSrv.findById(ckdj);
57             System.out.println(getExportBatch());
58             HSSFWorkbook workbook = ex.exportExcel("出库列表", headers, ckdj ,exportBatch);
59             this.workbookInputStream(workbook, fileName);
60         } catch (Exception e) {
61             logger.error("获取文件流失败!", e);
62         }
63         return excelStream;
64     }
65 
66     public void setExcelStream(InputStream excelStream) {
67         this.excelStream = excelStream;
68     }
69 
70     public Ckdj getCkdj() {
71         return ckdj;
72     }
73 
74     public void setCkdj(Ckdj ckdj) {
75         this.ckdj = ckdj;
76     }
77     
78     public String getFileName() {
79         return fileName;
80     }
81 
82     public void setFileName(String fileName) {
83         this.fileName = fileName;
84     }
85 
86     public void setCkdjSrv(CkdjService ckdjSrv) {
87         this.ckdjSrv = ckdjSrv;
88     }
89 
90     public String getExportBatch() {
91         return exportBatch;
92     }
93 
94     public void setExportBatch(String exportBatch) {
95         this.exportBatch = exportBatch;
96     }
97 
98 }
bubuko.com,布布扣

接着是struts2.xml文件

bubuko.com,布布扣
1 <action name="exportExcel" class="excelAction">
2    <result name="success" type="stream">
3          <param name="contentType">application/vnd.ms-excel</param>
4          <param name="inputName">excelStream</param>
5          <param name="contentDisposition">attachment;filename="${fileName}.xls"</param>
6          <param name="bufferSize">1024</param> 
7    </result>
8 </action>
bubuko.com,布布扣

然后是ExportExcel.java类的代码:

bubuko.com,布布扣
  1 /**
  2  * 导出Excel文档
  3  * @author zhaoxz
  4  *
  5  */
  6 @SuppressWarnings("unchecked")
  7 public class ExportExcel {
  8     
  9     /**
 10      * 创建workbook
 11      * @param title
 12      * @param headers
 13      * @param ckdj
 14      */
 15     public HSSFWorkbook exportExcel(String title,String[] headers,Ckdj ckdj,String exportBatch){
 16         
 17         //声明一个工作薄
 18         HSSFWorkbook workbook = new HSSFWorkbook();
 19         //生成一个表格
 20         HSSFSheet sheet = workbook.createSheet(title);
 21         //设置表格默认列宽为15个字节
 22         sheet.setDefaultColumnWidth(15);
 23         //生成一个样式
 24         HSSFCellStyle style = workbook.createCellStyle();
 25         //设置样式
 26         style.setFillForegroundColor(HSSFColor.WHITE.index);
 27         style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
 28         style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
 29         style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
 30         style.setBorderRight(HSSFCellStyle.BORDER_THIN);
 31         style.setBorderTop(HSSFCellStyle.BORDER_THIN);
 32         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
 33         //生成一个字体
 34         HSSFFont font = workbook.createFont();
 35         font.setColor(HSSFColor.BLACK.index);
 36         font.setFontHeightInPoints((short)14);
 37         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
 38         //把字体应用到当前样式
 39         style.setFont(font);
 40         
 41         // 生成并设置另一个样式  
 42         HSSFCellStyle style2 = workbook.createCellStyle();  
 43         style2.setFillForegroundColor(HSSFColor.WHITE.index);  
 44         style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
 45         style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
 46         style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
 47         style2.setBorderRight(HSSFCellStyle.BORDER_THIN);  
 48         style2.setBorderTop(HSSFCellStyle.BORDER_THIN);  
 49         style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
 50         style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
 51         // 生成另一个字体  
 52         HSSFFont font2 = workbook.createFont();  
 53         font2.setFontHeightInPoints((short)12);
 54         font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
 55         // 把字体应用到当前的样式  
 56         style2.setFont(font2);
 57         
 58         // 生成并设置另一个样式  
 59         HSSFCellStyle style3 = workbook.createCellStyle();  
 60         style3.setFillForegroundColor(HSSFColor.WHITE.index);  
 61         style3.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
 62         style3.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
 63         style3.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
 64         style3.setBorderRight(HSSFCellStyle.BORDER_THIN);  
 65         style3.setBorderTop(HSSFCellStyle.BORDER_THIN);  
 66         style3.setAlignment(HSSFCellStyle.ALIGN_LEFT);  
 67         style3.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
 68         // 生成另一个字体  
 69         HSSFFont font3 = workbook.createFont();  
 70         font3.setFontHeightInPoints((short)12);
 71         font3.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
 72         // 把字体应用到当前的样式  
 73         style3.setFont(font3);
 74         
 75         // 生成并设置另一个样式   样式4
 76         HSSFCellStyle style4 = workbook.createCellStyle();  
 77         style4.setFillForegroundColor(HSSFColor.WHITE.index);  
 78         style4.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
 79         style4.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
 80         style4.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
 81         style4.setBorderRight(HSSFCellStyle.BORDER_THIN);  
 82         style4.setBorderTop(HSSFCellStyle.BORDER_THIN);  
 83         style4.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
 84         style4.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
 85         // 生成另一个字体  
 86         HSSFFont font4 = workbook.createFont();  
 87         font4.setFontHeightInPoints((short)11);
 88         // 把字体应用到当前的样式  
 89         style4.setFont(font4);
 90         
 91         //产生表格标题行
 92         HSSFRow row = sheet.createRow(0);
 93         HSSFCell cel = row.createCell(0);
 94         cel.setCellStyle(style);
 95         cel.setCellValue("天维讯达无线电设备检测(北京)有限责任公司");
 96         HSSFCell c2 = row.createCell(1);
 97         c2.setCellStyle(style);
 98         HSSFCell c3 = row.createCell(2);
 99         c3.setCellStyle(style);
100         HSSFCell c4 = row.createCell(3);
101         c4.setCellStyle(style);
102         HSSFCell c5 = row.createCell(4);
103         c5.setCellStyle(style);
104         HSSFCell c6 = row.createCell(5);
105         c6.setCellStyle(style);
106         HSSFCell c7 = row.createCell(6);
107         c7.setCellStyle(style);
108         //合并单元格
109         sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));
110         
111         //2行
112         HSSFRow row2 = sheet.createRow(1);
113         HSSFCell cel2l = row2.createCell(0);
114         cel2l.setCellStyle(style2);
115         if(exportBatch.equals("0")){
116             cel2l.setCellValue("出库单");
117         }else{
118             cel2l.setCellValue("出库单(第"+ckdj.getBatch()+"批)");
119         }
120         HSSFCell rc2 = row2.createCell(1);
121         rc2.setCellStyle(style);
122         HSSFCell rc3 = row2.createCell(2);
123         rc3.setCellStyle(style);
124         HSSFCell rc4 = row2.createCell(3);
125         rc4.setCellStyle(style);
126         HSSFCell rc5 = row2.createCell(4);
127         rc5.setCellStyle(style);
128         HSSFCell rc6 = row2.createCell(5);
129         rc6.setCellStyle(style);
130         HSSFCell rc7 = row2.createCell(6);
131         rc7.setCellStyle(style);
132         sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 6)); //合并单元格
133         
134         //3行
135         HSSFRow rowhead = sheet.createRow(2);
136         sheet.addMergedRegion(new CellRangeAddress(2, 2, 0, 4)); //合并单元格
137         //3行左
138         HSSFCell cel3l = rowhead.createCell(0);
139         cel3l.setCellStyle(style3);
140         cel3l.setCellValue("所属项目:"+ckdj.getProjectNumber());
141         //3行右
142         HSSFCell cel3r = rowhead.createCell(5);
143         cel3r.setCellStyle(style2);
144         cel3r.setCellValue("出库单号:"+ckdj.getReleasingNumber());
145         HSSFCell cel27 = rowhead.createCell(6);
146         cel27.setCellStyle(style2);
147         sheet.addMergedRegion(new CellRangeAddress(2, 2, 5, 6));
148         
149         HSSFRow rowbody = sheet.createRow(3);
150         for (int i = 0; i < headers.length; i++) {
151             HSSFCell cell = rowbody.createCell(i);
152             cell.setCellStyle(style2);
153             HSSFRichTextString text = new HSSFRichTextString(headers[i]);
154             cell.setCellValue(text);
155         }
156         
157         //遍历集合数据,产生数据行
158         Iterator it = ckdj.getGoods().iterator();
159         int index = 3;
160         while (it.hasNext()) {
161             index++;
162             row = sheet.createRow(index);
163             CkdjDetailed t = (CkdjDetailed)it.next();
164             
165             //创建单元格
166             HSSFCell cell0 = row.createCell(0);
167             cell0.setCellStyle(style4);
168             cell0.setCellValue(t.getNum());
169             
170             HSSFCell cell1 = row.createCell(1);
171             cell1.setCellStyle(style4);
172             cell1.setCellValue(t.getEqName());
173             
174             HSSFCell cell2 = row.createCell(2);
175             cell2.setCellStyle(style4);
176             cell2.setCellValue(t.getEqStandard());
177             
178             HSSFCell cell3 = row.createCell(3);
179             cell3.setCellStyle(style4);
180             cell3.setCellValue(t.getEqSernumber());
181             
182             HSSFCell cell4 = row.createCell(4);
183             cell4.setCellStyle(style4);
184             cell4.setCellValue(t.getEqNums());
185             
186             HSSFCell cell5 = row.createCell(5);
187             cell5.setCellStyle(style4);
188             cell5.setCellValue(t.getEqUnits());
189             
190             HSSFCell cell6 = row.createCell(6);
191             cell6.setCellStyle(style4);
192             cell6.setCellValue("");
193         }
194         HSSFRow last1 = sheet.createRow(index+3);
195         HSSFCell lcel1 = last1.createCell(4);
196         lcel1.setCellValue("送货人:");
197         HSSFRow last2 = sheet.createRow(index+4);
198         HSSFCell lcel2 = last2.createCell(4);
199         lcel2.setCellValue("送货时间:");
200         HSSFRow last3 = sheet.createRow(index+5);
201         HSSFCell lcel3 = last3.createCell(4);
202         lcel3.setCellValue("收货人:");
203         HSSFRow last4 = sheet.createRow(index+6);
204         HSSFCell lcel4 = last4.createCell(4);
205         lcel4.setCellValue("收货时间:");
206         return workbook;
207     }
208     
209     /**
210      * 创建仓库workbook
211      * @param title
212      * @param headers
213      * @param rkdjs
214      * @return
215      */
216     public HSSFWorkbook exportWareExcel(String title,String[] headers,List<Rkdj> rkdjs){
217         
218         //声明一个工作薄
219         HSSFWorkbook workbook = new HSSFWorkbook();
220         //生成一个表格
221         HSSFSheet sheet = workbook.createSheet(title);
222         //设置表格默认列宽为15个字节
223         sheet.setDefaultColumnWidth(15);
224         //生成一个样式
225         HSSFCellStyle style = workbook.createCellStyle();
226         //设置样式
227         style.setFillForegroundColor(HSSFColor.WHITE.index);
228         style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
229         style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
230         style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
231         style.setBorderRight(HSSFCellStyle.BORDER_THIN);
232         style.setBorderTop(HSSFCellStyle.BORDER_THIN);
233         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
234         //生成一个字体
235         HSSFFont font = workbook.createFont();
236         font.setColor(HSSFColor.BLACK.index);
237         font.setFontHeightInPoints((short)14);
238         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
239         //把字体应用到当前样式
240         style.setFont(font);
241         
242         // 生成并设置另一个样式  
243         HSSFCellStyle style2 = workbook.createCellStyle();  
244         style2.setFillForegroundColor(HSSFColor.WHITE.index);  
245         style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
246         style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
247         style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
248         style2.setBorderRight(HSSFCellStyle.BORDER_THIN);  
249         style2.setBorderTop(HSSFCellStyle.BORDER_THIN);  
250         style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
251         style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
252         // 生成另一个字体  
253         HSSFFont font2 = workbook.createFont();  
254         font2.setFontHeightInPoints((short)12);
255         font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
256         // 把字体应用到当前的样式  
257         style2.setFont(font2);
258         
259         // 生成并设置另一个样式  
260         HSSFCellStyle style3 = workbook.createCellStyle();  
261         style3.setFillForegroundColor(HSSFColor.WHITE.index);  
262         style3.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
263         style3.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
264         style3.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
265         style3.setBorderRight(HSSFCellStyle.BORDER_THIN);  
266         style3.setBorderTop(HSSFCellStyle.BORDER_THIN);  
267         style3.setAlignment(HSSFCellStyle.ALIGN_LEFT);  
268         style3.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
269         // 生成另一个字体  
270         HSSFFont font3 = workbook.createFont();  
271         font3.setFontHeightInPoints((short)12);
272         font3.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
273         // 把字体应用到当前的样式  
274         style3.setFont(font3);
275         
276         // 生成并设置另一个样式   样式4
277         HSSFCellStyle style4 = workbook.createCellStyle();  
278         style4.setFillForegroundColor(HSSFColor.WHITE.index);  
279         style4.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
280         style4.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
281         style4.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
282         style4.setBorderRight(HSSFCellStyle.BORDER_THIN);  
283         style4.setBorderTop(HSSFCellStyle.BORDER_THIN);  
284         style4.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
285         style4.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
286         // 生成另一个字体  
287         HSSFFont font4 = workbook.createFont();  
288         font4.setFontHeightInPoints((short)11);
289         // 把字体应用到当前的样式  
290         style4.setFont(font4);
291         
292         //列头
293         HSSFRow rowbody = sheet.createRow(0);
294         for (int i = 0; i < headers.length; i++) {
295             HSSFCell cell = rowbody.createCell(i);
296             cell.setCellStyle(style2);
297             HSSFRichTextString text = new HSSFRichTextString(headers[i]);
298             cell.setCellValue(text);
299         }
300         
301         //遍历集合数据,产生数据行
302         int index = 0;
303         Iterator it = rkdjs.iterator();
304         while (it.hasNext()) {
305             index++;
306             HSSFRow row = sheet.createRow(index);
307             Rkdj t = (Rkdj) it.next();
308             //创建单元格
309             HSSFCell cell0 = row.createCell(0);
310             cell0.setCellStyle(style4);
311             cell0.setCellValue(t.getJoinTime());
312             
313             HSSFCell cell1 = row.createCell(1);
314             cell1.setCellStyle(style4);
315             cell1.setCellValue(t.getJoinNumbers());
316             
317             HSSFCell cell2 = row.createCell(2);
318             cell2.setCellStyle(style4);
319             cell2.setCellValue(t.getEquipmentName());
320             
321             HSSFCell cell3 = row.createCell(3);
322             cell3.setCellStyle(style4);
323             cell3.setCellValue(t.getStandard());
324             
325             HSSFCell cell4 = row.createCell(4);
326             cell4.setCellStyle(style4);
327             cell4.setCellValue(t.getSeriesNumber());
328             
329             HSSFCell cell5 = row.createCell(5);
330             cell5.setCellStyle(style4);
331             cell5.setCellValue(t.getLocation());
332             
333             HSSFCell cell6 = row.createCell(6);
334             cell6.setCellStyle(style4);
335             cell6.setCellValue(t.getAmount());
336             
337             HSSFCell cell7 = row.createCell(7);
338             cell7.setCellStyle(style4);
339             cell7.setCellValue(t.getStock());
340             
341             HSSFCell cell8 = row.createCell(8);
342             cell8.setCellStyle(style4);
343             cell8.setCellValue(t.getComments());
344         }
345         return workbook;
346     }
347 }
bubuko.com,布布扣

这样基本就没什么问题了,本人小白,希望能得到更多的指导!在此多谢了....

poi实现Excel导出,布布扣,bubuko.com

poi实现Excel导出

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/xinzehome/p/3760654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!