1.首先是页面上的布局:
<a style="margin-left: 1400px;" class="btn btn-primary" id="excell" href="${pageContext.request.contextPath }/dzsw/findExcell.action">导出表格</a>
这里只需要a标签超链接请求导出接口!
2.在service层编写接口:
首先添加依赖POI
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.9</version>
</dependency>
List<Dzsw> findExcell(String lianxirenname,String sex,String name,String zubie,String duty);
这个方法根据页面搜索条件,添加了四个可搜索的参数条件(这四个参数搜索按照实际需要添加)
HSSFWorkbook export(List<Dzsw> list, String lianxirenname, String sex, String name, String zubie, String duty);
这个方法是把findExcell上面的这个方法的搜索结果作为第一个参数传入,剩下的参数和findExcell的参数一样,结果是把搜索列表放入excel表中
3.serviceimpl 实现层的方法:
在mapper文件的方法是:
List<Dzsw> findExcell(@Param("lianxirenname")String lianxirenname,@Param("sex")String sex,@Param("name")String name,@Param("zubie")String zubie,@Param("duty")String duty);
在service实现层中注入上面方法,在serviceimpl 中这样写入方法-》
@Autowired
DzswMapper dm;
@Override//还是service中的方法,查找根据条件得到搜索列表
public List<Dzsw> findExcell(String lianxirenname, String sex, String name, String zubie, String duty) {
// TODO Auto-generated method stub
return dm.findExcell(lianxirenname, sex, name, zubie, duty);
}
@Override//这里是把上面搜索结果传入参数中
public HSSFWorkbook export(List<Dzsw> list, String lianxirenname, String sex, String name, String zubie, String duty) {
String[] excelHeader = { "报名id","联系人姓名","联系人电话","联系人微信", "代表队", "通讯地址","序号","职务","参赛报名人员姓名","性别","组别","单打","双打","双打配对人员","上传资料"};//excell中表头标题第一行
HSSFWorkbook wb = new HSSFWorkbook();
//创建HSSFSheet对象
HSSFSheet sheet = wb.createSheet("参赛人员报名信息表1"); //sheet的表格的名字
HSSFRow row = sheet.createRow((int) 0);
HSSFCellStyle style = wb.createCellStyle(); //excell表格样式
style.getFillBackgroundColorColor();
style.getFillForegroundColor();
//根据标题项目名字,建立cellrow与cellcolumn
for (int i = 0; i < excelHeader.length; i++) { //根据表头excelHeader 的第一行的表格数,添加表格列
HSSFCell cell = row.createCell(i);
cell.setCellValue(excelHeader[i]);
cell.setCellStyle(style);
sheet.autoSizeColumn(i);
//设置指定列的列宽,256 * 50这种写法是因为width参数单位是单个字符的256分之一
sheet.setColumnWidth(cell.getColumnIndex(), 100 * 50);
}
list = dm.findExcell(lianxirenname, sex, name, zubie, duty);//查找符合页面上搜索框中条件的集合对象
//根据查找的集合对象的长度把对象的字段赋值到row行的cell表格中
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
Dzsw applyCard = list.get(i);
row.createCell(0).setCellValue(applyCard.getId());
row.createCell(1).setCellValue(applyCard.getLianxirenname());
row.createCell(2).setCellValue(applyCard.getLianxirenphone());
row.createCell(3).setCellValue(applyCard.getLianxirenweixin());
row.createCell(4).setCellValue(applyCard.getDaibiaodui());
row.createCell(5).setCellValue(applyCard.getAddress());
row.createCell(6).setCellValue(applyCard.getXuhao());
row.createCell(7).setCellValue(applyCard.getDuty());
row.createCell(8).setCellValue(applyCard.getName());
row.createCell(9).setCellValue(applyCard.getSex());
row.createCell(10).setCellValue(applyCard.getZubie());
row.createCell(11).setCellValue(applyCard.getName());
row.createCell(12).setCellValue(applyCard.getSex());
row.createCell(13).setCellValue(applyCard.getDanda());
row.createCell(14).setCellValue(applyCard.getShuangda());
row.createCell(15).setCellValue(applyCard.getSdpeidui());
row.createCell(16).setCellValue(applyCard.getZiliao());
}
return wb;
}
4.在请求的接口的controller中 方法实现:
/**
* 导出excel方法
* @param request
* @param response
* @param contentType2
* @throws IOException
*/
@ResponseBody
@RequestMapping(value = "/dzsw/findExcell", produces = "application/octet-stream")
public void findExcell(HttpServletRequest request, HttpServletResponse response,HttpSession session)throws IOException {
response.setHeader( "Access-Control-Allow-Origin", "*");
List<Dzsw> list = new ArrayList<Dzsw>();
String lianxirenname=(String) session.getAttribute("exname");//获取从页面上传入的搜索条件
String sex=(String) session.getAttribute("sex");//获取从页面上传入的搜索条件
String name =(String) session.getAttribute("workunit");//获取从页面上传入的搜索条件
String zubie =(String) session.getAttribute("teams");//获取从页面上传入的搜索条件
String duty=(String) session.getAttribute("duty");//获取从页面上传入的搜索条件
System.out.println(name+sex+lianxirenname+zubie+duty+"============session存在的值");
list = ds.findExcell(lianxirenname, sex, name, zubie, duty);//查找根据传入条件查找搜索结果列表
for (Dzsw dzsw : list) {
System.out.println(dzsw+"后台查询的结果集excel!!!!!");
}
HSSFWorkbook wb = ds.export(list, lianxirenname, sex, name, zubie, duty);//调用搜索结果放入导出excel
OutputStream output = response.getOutputStream();//用文件流读取文件并返回页面
response.addHeader("Content-Disposition", "inline;filename="+ new SimpleDateFormat("yyyyMMdd_HHmmssSSS").format(new Date()) + ".xls");
response.setContentType("application/msexcel");
wb.write(output);
output.close();
session.removeAttribute("exname");//把session域中的搜索条件删除,防止下次搜索条件传入冲突
session.removeAttribute("sex");//把session域中的搜索条件删除,防止下次搜索条件传入冲突
session.removeAttribute("workunit");//把session域中的搜索条件删除,防止下次搜索条件传入冲突
session.removeAttribute("teams");//把session域中的搜索条件删除,防止下次搜索条件传入冲突
session.removeAttribute("duty");//把session域中的搜索条件删除,防止下次搜索条件传入冲突
}
5.当你这样写的时候肯定可以用了,excel表全部数据可以导出,同时可以根据搜索条件导出搜索结果也可以用了
6.我也建议用bootstrap中自己带的bootstrap-table-export.js也可以配置导出excel表格数据!