java动态生成excel打包下载
    @SuppressWarnings("unchecked")
    public String batchExport() throws DBException{  
        @SuppressWarnings("unused")
        List chkList = this.checkValueToList();//获取复选框的值
        List srcfile=new ArrayList();  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHSS");
        String path = sdf.format(new Date());  
        String serverPath = request.getSession().getServletContext().getRealPath("/");
        //在服务器端创建文件夹
        File file = new File(serverPath+path);
        if(!file.exists()){
            file.mkdir();
        }  
        for (int i = 0; i < chkList.size(); i++ ){
            String t[] = chkList.get(i).split("\\|");
            LhjcOrgSelfQuery lhjcunioncheckquery = new LhjcOrgSelfQuery();
            lhjcunioncheckquery.setChnoticeId(t[0]);
            lhjcunioncheckquery.setOrgId(t[1]);
            lhjcunioncheckquery.setSelfChTempId(t[2]);
            List> reportViews=commonService.getObjectPages("ExportLhjcunioncheckresultReportView", lhjcunioncheckquery);
            String orgName = (String)commonService.get2Object("getUnioncheckOrgName", t[1]);
            //生成excel的名字
            String templateName = nyear+"深圳市党政机关信息安全检查结果-"+(orgName==null?"未知单位":orgName);  
            String[] headArray = new String[]{"编码","检查项名称","   检查内容   ","考核类型","   检查结果   ","   备注   ","权重","得分"};  
            String[] fieldArray = new String[]{"CHECKITEMCODE","CHITEMNAME","CHCONTENT","REPORTTYPE","QUESTDESC","CHITEMDESC","REPORTWEIGHT","UNIONSCORE"};  
            ExportUtils exportUtils = new ExportUtils();
            exportUtils.setTitle(templateName);
            exportUtils.setHead(templateName);
            exportUtils.setHeadArray(headArray);
            exportUtils.setFieldArray(fieldArray);
            try {
                HttpServletResponse response = ServletActionContext.getResponse();  
                SimpleDateFormat sfm = new SimpleDateFormat("yyyy-MM-dd");
                String filename = templateName + "_" + sfm.format(new Date());  
                String encodedfileName = new String(filename.getBytes(), "GBK");
                //将生成的多个excel放到服务器的指定的文件夹中
                FileOutputStream out = new FileOutputStream(serverPath+path+"\"+encodedfileName+".xls");  
                if(fileType.indexOf(",") != -1){
                    fileType = StringUtils.substringBefore(fileType, ",");
                }
                response.setHeader("Content-Disposition", " filename="" + encodedfileName + "." + fileType + """);  
                //导出excel
                if ("xls".equals(fileType) || "xlsx".equals(fileType)) {
                    exportUtils.exportExcel(reportViews,fileType,out);
                } else if("doc".equals(fileType) || "docx".equals(fileType)){
                    exportUtils.exportWord(reportViews, fileType, out);
                } else if("pdf".equals(fileType)){
                    exportUtils.exportPdf(reportViews, out);
                }   
                srcfile.add(new File(serverPath+path+"\"+encodedfileName+".xls"));  
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //将服务器上存放Excel的文件夹打成zip包
        File zipfile = new File(serverPath+path+".zip");
        this.zipFiles(srcfile, zipfile);
        //弹出下载框供用户下载
        this.downFile(ServletActionContext.getResponse(),serverPath, path+".zip");
        return null;
    }  
    public void zipFiles(List srcfile, File zipfile) {
        byte[] buf = new byte[1024];
        try {
            // Create the ZIP file
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
            // Compress the files
            for (int i = 0; i < srcfile.size(); i++) {
                File file = srcfile.get(i);
                FileInputStream in = new FileInputStream(file);
                // Add ZIP entry to output stream.
                out.putNextEntry(new ZipEntry(file.getName()));
                // Transfer bytes from the file to the ZIP file
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                // Complete the entry
                out.closeEntry();
                in.close();
            }
            // Complete the ZIP file
            out.close();
        } catch (IOException e) {
           e.printStackTrace();
        }
    }    
    public void downFile(HttpServletResponse response,String serverPath, String str) {
        try {
            String path = serverPath + str;
            File file = new File(path);
            if (file.exists()) {
                InputStream ins = new FileInputStream(path);
                BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面
                OutputStream outs = response.getOutputStream();// 获取文件输出IO流
                BufferedOutputStream bouts = new BufferedOutputStream(outs);
                response.setContentType("application/x-download");// 设置response内容的类型
                response.setHeader(
                        "Content-disposition",
                        "attachment;filename="
                                + URLEncoder.encode(str, "GBK"));// 设置头部信息
                int bytesRead = 0;
                byte[] buffer = new byte[8192];
                 //开始向网络传输文件流
                while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {
                   bouts.write(buffer, 0, bytesRead);
               }
               bouts.flush();// 这里一定要调用flush()方法
                ins.close();
                bins.close();
                outs.close();
                bouts.close();
            } else {
                response.sendRedirect("../error.jsp");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }  
java动态生成excel打包下载的更多相关文章
- 利用Java动态生成 PDF 文档
		
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
 - Java 动态生成 PDF 文件
		
每片文章前来首小诗: 今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天. --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系 ...
 - Java 动态生成复杂 Word
		
Java 动态生成复杂 Word 阅读目录 1. 制作 Word 模版,将你需要动态生成的字段用${}替换.2. 将 Word文档保存为 xml .3. 引入项目. 项目中需要用 java 程序生成d ...
 - phpexcel生成excel并下载
		
Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...
 - Java Web 生成临时文件并下载(原)
		
概述:本文是 java 服务器端生成文件并下载的示例,并不完善,下载之后一般来说还需要删除临时文件. 注意:临时文件存放在 /WEB-INF/tmp 目录下,所以先要把 tmp 目录建起来. pu ...
 - Java Web 生成临时文件并下载
		
转自: Java Web 生成临时文件并下载 概述:本文是 java 服务器端生成文件并下载的示例,并不完善,下载之后一般来说还需要删除临时文件. 注意:临时文件存放在 /WEB-INF/tmp 目 ...
 - java动态生成HTML文件
		
在eclipse中,用java动态生成html文件. //用于存储html字符串 StringBuilder stringHtml = new StringBuilder(); try{ //打开文件 ...
 - java动态生成带下拉框的Excel导入模板
		
在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...
 - 使用node.js生成excel报表下载(excel-export express篇)
		
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
 
随机推荐
- CentOS6.3编译安装Memcached集群分布式缓存代理Magent-0.6出错汇总
			
参考文章:Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解,搭建Magent,在编译的过程中会出现很多错误: #编译安装安装magent到 /usr/local/mage ...
 - ThinkPHP框架表单验证
			
对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验证是ThinkPHP模型层提供 ...
 - CMD代码页
			
不同字符编码在CMD模式下会出现乱码,需要使用 chcp 代码页 命令来更改代码页显示正常. UTF-8 65001 简体中文 936 437 美国 850 多语 ...
 - 15天学会jquery
			
第二章 15 Days of jQuery 比window.onload 更快一些的载入 window.onload()是传统javascript 里一个能吃苦耐劳的家伙.它长久以来一直 被程序员们作 ...
 - mongodb的sql例子(简单版)
			
插入数据 db.person.insert({"name":"zfx","age":21}) 查找所有数据 db.person.find() ...
 - Effective Java 读书笔记之十 序列化
			
一.谨慎地实现Serializable接口 1.一旦一个类被发布,就大大地降低了“改变这个类的实现”的灵活性. 2.仔细设计类的序列化形式而不是接受类的默认虚拟化形式. 3.反序列化机制是一个“隐藏的 ...
 - BZOJ4411——[Usaco2016 Feb]Load balancing
			
1.题意: 给出N个平面上的点.保证每一个点的坐标都是正奇数. 你要在平面上画两条线,一条是x=a,一条是y=b,且a和b都是偶数. 直线将平面划成4个部分,要求包含点数最多的那个部分点数最少. 2. ...
 - iOS跳转到另一个程序
			
我这里只是写了部分东西,如果想看更加详细的,请点击原文链接. 原文链接:http://blog.csdn.net/likendsl/article/details/7553605 原则上iOS的沙 ...
 - 30秒攻破任意密码保护的PC:深入了解5美元黑客神器PoisonTap
			
近日,著名硬件黑客Samy Kamkar利用5美元设备打造的黑客工具PoisonTap,只需30秒,就可以攻破设置有任意密码的电脑系统,并实现长期后门安装.PoisonTap不是暴力破解密码,而是绕过 ...
 - Codeforces Gym 100114 D. Selection
			
Description 问选择一个序列上的所有数的最少操作次数,跟电脑上选择文件一样,输出操作方案. Sol 贪心. 用Shift一段文件只能使用一次,之后必须一直按Ctrl了. 然后就是看用Shif ...