/**
     * 使用模版导出Excel
     */
    @SuppressWarnings({ "unchecked", "deprecation" })
    @Override
    public String experExcel(Card card,HttpServletRequest request,HttpServletResponse response){
        try {
            
        Map<Object,Object> map=new HashMap<Object, Object>();
        StringBuffer where=new StringBuffer();
        StringBuffer useSql=new StringBuffer();
        Users user=(Users) request.getSession().getAttribute("user");
        //需要判断是否查询总帐号
        useSql.append(" from UseTbl where userIdFk='"+user.getId()+"' ");
    
        List<UseTbl> result=baseDao.qryInfo(useSql.toString(), null);//查询数据库数据
        
        map.put("experMessageList",result);
        map.put("experDate",new Date());
        String basePath=request.getRealPath("/");
        String temp=user.getName()+"的账单信息-"+user.getId()+".xls";
        createExcel(basePath+"files/账单信息.xls", map, basePath+"file/down/",temp);//basePath+"files/账单信息.xls" 模版的路径
        //temp = new String(temp.getBytes("utf-8"),"iso-8859-1");
        //InputStream is=new FileInputStream(new File(basePath+"upload/experMessageDownload/专家信息.xls"));
        return  download(request, response, basePath+"file/down/"+temp, temp);
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }    
    }

/**
     * 用excel模版模版导出excel
     *
     * @param templeteSrc
     *            模版路径(含名称)
     * @param params
     *            模版参数
     * @param newExcelPath
     *            生成excel路径
     */
    public static void createExcel(String templeteSrc, Map<Object,Object> params,
            String newExcelPath,String cre_FileName) {
        try {
            XLSTransformer transformer = new XLSTransformer();
            File file=new File(newExcelPath);
            if(!file.exists()){
                file.mkdirs();
            }
            transformer.transformXLS(templeteSrc, params, newExcelPath+cre_FileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

/**
     * 下载
     *
     * @param request
     * @param response
     * @param urlandfile
     *            文件路径+文件名
     * @param fileName
     *            文件名
     * @return success 和 error
     * @throws Exception
     */
    public static String download(HttpServletRequest request,
            HttpServletResponse response, String urlandfile, String fileName)
            throws Exception {
        String msg = null;
        try {
            response.setCharacterEncoding("UTF-8");
            javax.servlet.ServletOutputStream ou = response.getOutputStream();
            // 文件名
            // String filename=new
            // String(fileName.getBytes("ISO8859_1"),"GB2312").toString();

// 路径
            java.io.File file = new java.io.File(urlandfile);

if (!file.exists()) {
                System.out.println(file.getAbsolutePath() + " 文件不能存在!");
                msg = "unexists";
                return msg;
            }

// 读取文件流
            java.io.FileInputStream fileInputStream = new java.io.FileInputStream(
                    file);

// 下载文件
            // 设置响应头和下载保存的文件名

response.setContentType("application/x-msdownload;charset=UTF-8");// 弹出下载的框

response.setContentLength((int)file.length());// 下载统计文件大小的进度
            response.setHeader("Content-Disposition", "attachment; filename="
                    + new String(fileName.getBytes(), "ISO-8859-1"));
            // 下载框的信息
            if (fileInputStream != null) {
                // int filelen = fileInputStream.available();
                // 文件太大时内存不能一次读出,要循环

byte a[] = new byte[1024];
                int n = 0;
                while (n != -1) {
                    n = fileInputStream.read(a);
                    if (n > 0) {
                        ou.write(a, 0, n);
                    }
                }
                fileInputStream.read(a);

}
            fileInputStream.close();

ou.close();

msg = "success";
        } catch (Exception e) {
            e.printStackTrace();
            msg = "error";

}
        // 解决完成后使用一切正常,但是总抛出java.lang.IllegalStateException异常主要是流还存在
        return msg;
    }

=============excel模版(账单信息.xls)============================

名称 卡号 当期金额 消费日期 资金动向 消费类型
<jx:forEach items="${experMessageList}" var="experMessage">      
${experMessage.name} ${experMessage.cardFk} ${experMessage.xffs} ${experMessage.zrzh} ${experMessage.statsu} ${experMessage.Xflx}
</jx:forEach>          

jxls使用模版导出Excel的更多相关文章

  1. [poi使用]使用excel模版导出excel

    ​ Apache POI是基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式的开源项目.简而言之,您可以使用Java读写MS ...

  2. 按模版导出Excel

    实现效果: excel模版: ExcelHandle.java package com.common.utils; import java.io.File; import java.io.FileIn ...

  3. POI实现导出Excel和模板导出Excel

    一.导出过程 1.用户请求导出 2.先访问数据库,查询需要导出的结果集 3.创建导出的Excel工作簿 4.遍历结果集,写入工作簿 5.将Excel已文件下载的形式回复给请求客户端 二.具体实现(截取 ...

  4. Java使用POI导出excel(下)——实例与小技巧

    [更新]:thinkgem的导出工具类: /** * Copyright © 2012-2016 <a href="https://github.com/thinkgem/jeesit ...

  5. weblogic 12c下jxls导出excel报错Could not initialize class org.apache.poi.xssf.usermodel.XSSFVMLDrawing

    周一,开发反馈weblogic 12c下jxls导出excel报错,公司环境和UAT环境均报错,看日志如下: 2016-06-08 09:16:55,825 ERROR org.jxls.util.T ...

  6. JXLS导出Excel(模板导出)

    1.导包 在pom.xml中加入依赖如下: <dependency> <groupId>org.jxls</groupId> <artifactId>j ...

  7. java使用jxls导出Excel

    jxls是基于POI的Excel模板导出导入框架.通过使用类似于jstl的标签,有效较少导出Excel的代码量. 1.pom <!-- https://mvnrepository.com/art ...

  8. POI3.10 根据Excel模版导出数据测试

    1:所需jar包 2:Mysql数据库表内容如下: 3:代码结构如下: (1)User.java public class User { private int id; private String ...

  9. 导出Excel(导出一个模版)

    有时,客户需要一个标准的模板来填东西,然后在导入 这时可以弄好excel模板,供导出 /** * 导出excel模板文件 * @param request * @param response * @r ...

随机推荐

  1. css:段落文本两端对齐

    效果图: Css:

  2. js深拷贝与浅拷贝的区别及实现

    1. 对于基本数据类型 其值在内存中占据着固定大小的空间,并被保存在栈内存中.当一个变量向另一个变量复制基本类型的值,会创建这个值的副本,并且我们不能给基本数据类型的值添加属性.其为深拷贝. 2. 对 ...

  3. ZooKeeper读书笔记

    <ZooKeeper读书笔记> 1.Zookeeper是什么?Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布 ...

  4. 深入Docker 存储驱动 (转)

    参考: http://static.dockerone.com/ppt/filedriver.html#28

  5. Vue的 $parent,并不能准确找到上一层的控件,所以如果需要,需要填坑这个 bug,递归寻找下上级

    Vue的 $parent,并不能准确找到上一层的控件,所以如果需要,需要填坑这个 bug,递归寻找下上级 // Find components upward function findComponen ...

  6. 【整理】解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function

    解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function https://www.cnblogs.com/jaso ...

  7. Linux内核网络数据包处理流程

    Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO. ...

  8. get、post、put、delete

    form表单有两种提交方式,get和post,get没有请求体, 但是有查询字符串参数拼接在url后面,post有请求体,表单内容对用户不可见. 1.form表单以get请求提交, 2.from表单以 ...

  9. WCF未找到终结点

    配置都配了,仍然找不到,config文件没有重新加载,原因不详,只能重新编译一下,就好了....后续找找原因看看

  10. python 2018/8/25

    # 含多空格字符串的分割 hello = "hello python hello"print(a.split(" ")) # ['hello', 'python ...