Springmvc 使用 AbstractExcelView 导出excel

来源:互联网 发布:购物秒杀软件 编辑:程序博客网 时间:2024/05/21 09:44
页面调用: 

  1. $("#exportBtn").click(function () {  
  2.  location.href = "${pageContext.request.contextPath}/report/export?" + $("form").serialize()  
  3.        });   

 实现Spring mvc 下Excel导出 

1.新建类继承AbstractExcelView  

  1. import java.io.OutputStream;
  2. import java.util.Map;
  3. import javacommon.util.MyUtils;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import org.apache.poi.hssf.usermodel.HSSFCell;
  7. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  8. import org.apache.poi.hssf.usermodel.HSSFRow;
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  11. import org.springframework.web.servlet.view.document.AbstractExcelView;
  12. public class ViewExcel extends AbstractExcelView {
  13. @Override
  14. protected void buildExcelDocument(Map<String, Object> obj,
  15. HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response)
  16. throws Exception {
  17. HSSFSheet sheet = workbook.createSheet("list");
  18. sheet.setDefaultColumnWidth((short) 12);
  19. HSSFCell cell = getCell(sheet, 0, 0);
  20. setText(cell, "Spring Excel test");
  21. HSSFCellStyle dateStyle = workbook.createCellStyle();
  22. //dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy"));
  23. cell = getCell(sheet, 1, 0);
  24. cell.setCellValue("日期:2008-10-23");
  25. //cell.setCellStyle(dateStyle);
  26. getCell(sheet, 2, 0).setCellValue("测试1");
  27. getCell(sheet, 2, 1).setCellValue("测试2");
  28. HSSFRow sheetRow = sheet.createRow(3);
  29. for (short i = 0; i < 10; i++) {
  30. sheetRow.createCell(i).setCellValue(i * 10);
  31. }
  32. String filename = "测试.xls";//设置下载时客户端Excel的名称
  33. filename = MyUtils.encodeFilename(filename, request);//处理中文文件名
  34. response.setContentType("application/vnd.ms-excel");
  35. response.setHeader("Content-disposition", "attachment;filename=" + filename);
  36. OutputStream ouputStream = response.getOutputStream();
  37. workbook.write(ouputStream);
  38. ouputStream.flush();
  39. ouputStream.close();
  40. }
  41. }

处理中文文件名的方法:  

  1. /**
  2. * 设置下载文件中文件的名称
  3. *
  4. * @param filename
  5. * @param request
  6. * @return
  7. */
  8. public static String encodeFilename(String filename, HttpServletRequest request) {
  9. /**
  10. * 获取客户端浏览器操作系统信息
  11. * 在IE浏览器中得到的是:User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; Alexa Toolbar)
  12. * 在Firefox中得到的是:User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
  13. */
  14. String agent = request.getHeader("USER-AGENT");
  15. try {
  16. if ((agent != null) && (-1 != agent.indexOf("MSIE"))) {
  17. String newFileName = URLEncoder.encode(filename, "UTF-8");
  18. newFileName = StringUtils.replace(newFileName, "+", "%20");
  19. if (newFileName.length() > 150) {
  20. newFileName = new String(filename.getBytes("GB2312"), "ISO8859-1");
  21. newFileName = StringUtils.replace(newFileName, " ", "%20");
  22. }
  23. return newFileName;
  24. }
  25. if ((agent != null) && (-1 != agent.indexOf("Mozilla")))
  26. return MimeUtility.encodeText(filename, "UTF-8", "B");
  27. return filename;
  28. } catch (Exception ex) {
  29. return filename;
  30. }
  31. }

2 接下来在你的下载 Controller里面返回ModelAndView 即可   

  1. /**
  2. * 导出Excel
  3. * @param model
  4. * @param projectId
  5. * @param request
  6. * @return
  7. */
  8. @RequestMapping(value="/dcExcel",method=RequestMethod.GET)
  9. public ModelAndView toDcExcel(ModelMap model, HttpServletRequest request){
  10. List list = new ArrayList(); //测试数据没有用到
  11. Map map = new HashMap();
  12. list.add("test1");
  13. list.add("test2");
  14. map.put("list", list);
  15. ViewExcel viewExcel = new ViewExcel();
  16. return new ModelAndView(viewExcel, model);
  17. }
0 0
原创粉丝点击