java 使用 jxls实现的excel导出功能

1.实现在项目中引入jxls的jar及依赖,详见 jxls的maven配置

2.写好相关模板示例

java 使用 jxls实现的excel导出功能
模板基本语法,详细请自行百度

   模板的补充说明:

java 使用 jxls实现的excel导出功能
补充说明上图中的写法

3.加入到项目中

java 使用 jxls实现的excel导出功能
注意该位置,实际读取时是编译后的位置中读取

4.读取数据与下载

/**
 *注意代码需要放入方法中,此部分为核心代码,下载方式可以自己决定
 * 页面直接使用submit方式提交请求就行
 */
/*
 * 1.此处定义的beans变量为组中返回到excel模板中的数据,依据实际业务修改 
 * 2.上图中举出了两个用法,此处说明:
 *    beans.put("contract",获取contract对象的数据,直接放入就行,不用转json什么的);
 *    
 *    beans.put("collegeList",collegeList 存入的是List<CollegeApply>类型,直接放入就行);
 */
Map beans = new HashMap();
       net.sf.json.JSONObject jsonThemeObj = crmQiThemeService.findExpData(qiTheme);
      // beans.put("allDatas",”需要导出的数据”);
      // 放入实际业务数据,以key,value方式加入Map中,value不限list或实体对象或String类型      
 
         //模板路径!!,实际下载时读取的是编译后模板所在的位置,再替换数据
String templateFileName = request.getSession().getServletContext().getRealPath("WEB-INF") + File.separator + "classes" + File.separator + "templates" + File.separator + "modules" + File.separator + "gen" + File.separator + "colleges.xls";
         //下载后的文件名
         String fileName = "留学方案" + contract.getContractCode() + ".xls";
         //下载后的默认位置,使用非IE浏览器下载时,可以自选下载路径
         String destFileName= request.getSession().getServletContext().getRealPath("WEB-INF")+ "\\print\\"+fileName;
       
         XLSTransformer transformer = new XLSTransformer();
         try{
            transformer.transformXLS(templateFileName, beans, destFileName);
           // 以流的形式下载文件。
             InputStream fis = new BufferedInputStream(new FileInputStream(new File(destFileName)));
             byte[] buffer = new byte[fis.available()];
             fis.read(buffer);
             fis.close();
             // 清空response
             response.reset();
             // 设置response的Header
             response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
             response.addHeader("Content-Length", "" + new File(destFileName).length());
             OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
             response.setContentType("application/octet-stream");
             toClient.write(buffer);
             toClient.flush();
             toClient.close();
             modelMap.put("file", new File(destFileName));
          }catch (Exception e) {
           e.printStackTrace();
       }

  附:下载读取的模板位置:

java 使用 jxls实现的excel导出功能
标题

5.效果图

java 使用 jxls实现的excel导出功能
chrome下载后的位置按照浏览器下载的位置决定

Excel打开的效果

 java 使用 jxls实现的excel导出功能