JAVA导出Excel步骤
JAVA导出Excel方法
OK.就是这样了。最后我们在前台JSP中调用这个方法即可。如下
在你的点击导出按钮里的事件就是上面这个了,这样调用Action就可以了。
在很多项目中,都会有“数据导出到Excel”的需求,导出其实满简单的,但以前还没接触过导出功能时,项目需求就有一个导出功能,查看了网络中各人的经验。发现都很乱。讲不清楚。看不明白。要的没有,不要的一大堆加在代码中,使得新手看到这些代码很混乱。今天我也记录一下我导出Excel的方法。我会按步骤去写。这样大家可以直接Copy代码,然后根据自己的需求修改相应的步骤里的方法即可。
最近赶项目中,今天周六周日可以休息了,上周可是连续加班。在休息期间写写博客。谢谢大家的关注。
*导出Excel步骤
- 先导包,(poi包,他是apache下的导出Excel封装类包)
- 写导出Excel功能类
- 在Action中调用第二步的Excel功能类
- 在JSP前台调用Action执行导出功能
1.先导包,(poi包,他是apache下的导出Excel封装类包)
POI包,大家可以上百度下载。这个容易,我就不描述了。下载后,把包导入到你的项目中即可
2.写导出Excel功能类
这一步很关键。是导出的重要步骤,也是你要修改最多的内容,直接贴代码了。对了,对下面不能理解的同学,可以先自己在电脑上建一个Excel文档,先了解一下他是什么结构的表格。这样会更容易理解下面的代码。下面代码是一行行的插入数据,第一行为标题,第二行以后就是标题对应的数据,也就是数据库的数据了。
package com.ssh.fzp.common; import java.io.OutputStream; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import com.ssh.fzp.entity.VJJDB_ZPJQB; public class VJJDB_ZPJQB_Excel1 { //打开文件 Workbook wb = new HSSFWorkbook(); public CellStyle titleStyle(){ CellStyle style1 = wb.createCellStyle(); //居中 style1.setAlignment(CellStyle.ALIGN_CENTER); //背景色 style1.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //字体 Font font = wb.createFont(); // font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体 font.setColor(HSSFColor.BLACK.index); //颜色 font.setFontHeightInPoints((short) 12); //字体大小 style1.setFont(font); //边框 style1.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); style1.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE); style1.setBorderRight(HSSFCellStyle.BORDER_DOUBLE); style1.setBorderTop(HSSFCellStyle.BORDER_DOUBLE); return style1; } public CellStyle contentStyle(){ CellStyle style1 = wb.createCellStyle(); //居中 style1.setAlignment(CellStyle.ALIGN_CENTER); //背景色 style1.setFillForegroundColor(HSSFColor.WHITE.index); style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //字体 Font font = wb.createFont(); // font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体 font.setColor(HSSFColor.BLACK.index); //颜色 style1.setFont(font); //边框 style1.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); style1.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE); style1.setBorderRight(HSSFCellStyle.BORDER_DOUBLE); style1.setBorderTop(HSSFCellStyle.BORDER_DOUBLE); style1.setWrapText(true); return style1; } public void printExcel(List<VJJDB_ZPJQB> list,OutputStream os){ try{ //1创建Excel文档 <span style="white-space:pre"> </span>//1创建Excel文档 Sheet sheet = wb.createSheet("文档名"); //创建标题信息, String [] title = {"<span style="font-family: Arial, Helvetica, sans-serif;">内容1</span>","<span style="font-family: Arial, Helvetica, sans-serif;">内容2</span>","内容3","内容4"};//这就是第一行 Row titleRow = sheet.createRow(0); for (int i = 0; i < title.length; i++) { Cell cell = titleRow.createCell(i); cell.setCellValue(title[i]); //设置列宽 sheet.setColumnWidth(i, 5500); cell.setCellStyle(titleStyle()); } Cell cell = null;<span style="white-space:pre"> </span>//以下就是数据库中读取出来的数据,list是数据集合 for (int i = 0; i< list.size(); i++) { Row row = sheet.createRow(i+1); VJJDB_ZPJQB vjjdb_zpjqb = list.get(i); // String ZPLX =String.valueOf(vjjdb_zpjqb.getZPLX()); String [] contents = {vjjdb_zpjqb.getJQ(),vjjdb_zpjqb.getBJ(),vjjdb_zpjqb.getBJM(),vjjdb_zpjqb.getBJ()}; for (int j = 0; j < contents.length; j++) { cell = row.createCell(j); cell.setCellValue(contents[j]); cell.setCellStyle(contentStyle()); } } wb.write(os);<span style="white-space:pre"> </span>//写入数据 os.close();<span style="white-space:pre"> </span>//关闭流 }catch(Exception e){ } } }
3.在Action中调用第二步的Excel功能类
/** * 导出Excel * @throws IOException */ @SuppressWarnings("unchecked") @Action("ZPJQBExcel") public String ZPJQBExcel() throws IOException { Object[] params = (Object[]) ServletActionContext.getRequest().getSession().getAttribute("params"); Object[] values = (Object[]) ServletActionContext.getRequest().getSession().getAttribute("values"); List<VJJDB_ZPJQB> list = vjjdb_zpjqbService.find(params, values, -1, -1); OutputStream os = response.getOutputStream();<span style="white-space:pre"> </span>//上面是按条件查询出来的list数据集合,从这句开始就是导出Excel的方法 response.setContentType("application/vnd.ms-Excel"); VJJDB_ZPJQB_Excel1 vjjdb_zpjqb_excel = new VJJDB_ZPJQB_Excel1(); vjjdb_zpjqb_excel.printExcel(list, os); System.setOut(new PrintStream(os)); os.flush(); return null; }我这里思路是:我调用了我项目中的按条件查询并带有分页功能的方法。把里面的条件(params)和前台传过来的值(values)用Session传过来,既然要传过来,自然要在那个方法里先把这两个参数放到Session中,才能使用上面Session方法读出。然后我们再调用find()查询出List数据集合。最后就是下面的导出Excel语句了,把list传入即可。
不会Session保存?那我再贴出把值放入Session中的语句吧。
ServletActionContext.getRequest().getSession().setAttribute("params", params); ServletActionContext.getRequest().getSession().setAttribute("values", values);
OK.就是这样了。最后我们在前台JSP中调用这个方法即可。如下
4.在JSP前台调用Action执行导出功能
location.href = "${pageContext.request.contextPath}/ZPJQBExcel.action";
有什么不明白的可以留言,我看到后就会回复,本人是福建厦门程序员,欢迎大家加Q为好友。348843576.不管你是刚开始学习的,还是前辈,我都欢迎。谢谢。
版权声明:本文为博主原创文章,未经博主允许不得转载。