由于经常到本站找前辈们的资料,觉得非常方便,加上本人记忆力十分差劲,所以今天开博上来保存一些资料,如果恰好有人能用的到希望也能给大家点启发
最近要做报表,导出excel是必须的,所以本人提前准备了一下,本着偷懒的想法(汗~杂说漏了)本人决定用jsp导出 方法2种:
第一种:poi+jsp导出excel
<%@ page language="java" contentType="text/html;charset=GBK"%> <%@ page import = "java.util.*"%> <jsp:directive.page import="java.text.SimpleDateFormat"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFSheet"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFRow"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFCell"/> <%@ page import="com.test.dto.testDTO"%>
poi的包不多说了 剩下的就是jsp设置和自己用到的其他包
<%@ page language="java" contentType="text/html;charset=GBK"%> <%@ page import = "java.util.*"%> <jsp:directive.page import="java.text.SimpleDateFormat"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFSheet"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFRow"/> <jsp:directive.page import="org.apache.poi.hssf.usermodel.HSSFCell"/> <%@ page import="com.test.dto.testDTO"%> <% //设置excel的名字 String name = "download.xls"; response.reset(); response.setContentType("application/download"); response.setHeader("Content-Disposition", "attachment; filename=" + new String(name.getBytes("gbk"), "iso8859-1")); //设置初始行数 int rownumber = 1; //初始化Book HSSFWorkbook wb = new HSSFWorkbook(); //建立个sheet HSSFSheet sheet = wb.createSheet("sheet"); //设置列宽度 sheet.setColumnWidth((short) 0, (short) 3000); sheet.setColumnWidth((short) 1, (short) 3000); //想导出几个字段就设置几个 // 表头信息 HSSFRow headers = sheet.createRow( (short) 0); //建立单元格 HSSFCell header8 = headers.createCell( (short) 0) ; //设置字符集 header8.setEncoding(HSSFCell.ENCODING_UTF_16); //单元格的头名称 类似展现table时的列头 header8.setCellValue("礼品名称"); HSSFCell header7 = headers.createCell( (short) 1) ; header7.setEncoding(HSSFCell.ENCODING_UTF_16); header7.setCellValue("礼品价格"); //接受servlet传过来的list if(request.getAttribute("list") != null){ ArrayList list = (ArrayList)request.getAttribute("list"); //遍历 for(int i = 0;i < list.size();i ++){ testDTO dto = (testDTO )list.get(i); //插入数据 创建一行 HSSFRow headers_list = sheet.createRow((short)(rownumber)); //通过遍历把"每一列的" cell填充上自己的数据 需要几个字段就创建几个 HSSFCell header0_list = headers_list.createCell((short)0); header0_list.setEncoding(HSSFCell.ENCODING_UTF_16); header0_list.setCellValue(dto.getPartnername()); HSSFCell header1_list = headers_list.createCell((short)1); header1_list.setEncoding(HSSFCell.ENCODING_UTF_16); header1_list.setCellValue(dto.getPetype()); rownumber++; } } wb.write(response.getOutputStream()); out.clear(); out = pageContext.pushBody(); %>
第二种:纯jsp导出excel(更偷懒)
<%@ page contentType="application/download;charset=GBK"%> <%@ page import="java.util.ArrayList,java.util.HashMap"%> <%@ page import="com.test.dto.testDTO"%> <% String name = "download.xls"; name = new String(name.getBytes("GBK"), "ISO-8859-1"); response.setHeader("Content-Disposition", "attachment; filename=" + name); %> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <table width="100%" border="1" align="center" cellpadding="0" cellspacing="1" class="con_02"> <tr> <td> 列1 </td> <td> 列2 </td> <td> 列3 </td> </tr> <% ArrayList list = (ArrayList)request.getAttribute("list"); if(list.size()>0) { for(int i = 0; i<list.size();i++) { testDTO dto1 = (testDTO)list.get(i); %> <tr> <td><%= dto1.getPartnername()%></td> <td><%= dto1.getPartnername()%></td> <td><%= dto1.getPartnername()%></td> </tr> <% } } %> </table> </head>
注释不多,但是其实里面别的代码没有,基本就是html组成的table和tr,td什么的,重要的就是头部信息的设置
由于本人还属于菜鸟级别,如有错误请大家批评指证,并无写教程的想法,只为记录资料 :)