`
peteronline
  • 浏览: 262202 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 动态生成多个excel文件打成zip包供用户下载

    博客分类:
  • Java
 
阅读更多
最近项目中有这样的需求:就是选择页面上的多条记录,每一条记录生成一个excel,然后把所有选择记录生成的excel打包成zip包供用户下载。
后台代码:
/**
	 * 批量导出Excel
	 * @return
	 * @throws DBException
	 */
	@SuppressWarnings("unchecked")
	public String batchExport() throws DBException{
		
		@SuppressWarnings("unused")
		List<String> chkList = this.checkValueToList();//获取复选框的值
		List<File> srcfile=new ArrayList<File>();
		
		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<Map<String,String>> 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;
	}


	/**
	 * 将多个Excel打包成zip文件
	 * @param srcfile
	 * @param zipfile
	 */
	public void zipFiles(List<File> 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();
        }  
    }


页面调用:
<script language="javascript">
       <!-- 

//批量导出Excel
       function batchExport(){
       		var chkbox = $("input[type='checkbox'][name='chk'][checked]");
			if(chkbox.length == 0){
				alert('请选择一条或多条记录操作!');
				return;
			}
			$("#exportLoading").html('<img src="${ctx}/images/loading.gif"/>');
			
			var checkboxvalue = '';
			chkbox.each(function(){
				checkboxvalue += $(this).val()+",";
			});
			
			var nyear = document.getElementById('nyear').value;
			
			if(checkboxvalue != null && checkboxvalue.length > 0){
				
				checkboxvalue = checkboxvalue.substring(0,checkboxvalue.length-1);
				$('#checkboxvalue').val(checkboxvalue);
				
				var form = document.forms[0];
				form.action="${ctx}/core/lhjc/lhjccheckjd/batchExport.action?fileType=xls&chvalue="+checkboxvalue+"&nyear="+nyear;
			    form.submit();
			    $("#exportLoading").empty();
			}
			
       }
		
		-->
		</script>
分享到:
评论
4 楼 18335864773 2017-11-17  
用pageoffice 把.不需要文件的上传下载, 直接在线打开文档, 并且调用简单一句代码就可以下载文档.
3 楼 xhgrid 2015-08-25  
请问,exportUtils能提供参考吗?
2 楼 yzzanson 2013-05-15  
还有reportViews这个对象的基本组成
1 楼 yzzanson 2013-05-15  
你好 你的ExportUtil代码能参考下吗?

相关推荐

    生成excel并打包成zip文件

    综上所述,"生成excel并打包成zip文件"这个任务涉及到使用Java编程语言,特别是Apache POI库来生成Excel文件,再结合Java标准库的压缩功能将Excel和文本文件打包成ZIP。整个过程涉及到了文件的创建、写入、压缩和...

    多个excel导出压缩成zip 文件 数据量大导出

    "多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...

    java后台批量下载文件并压缩成zip下载的方法

    Java后台批量下载文件并压缩成zip下载的方法 Java后台批量下载文件并压缩成zip下载的方法是指在Java后台中批量下载文件,并将其压缩成zip文件下载到本地桌面。该方法具有重要的参考价值,感兴趣的小伙伴们可以参考...

    java将数据导入多个excel并压缩,亲测可用

    综上所述,实现“java将数据导入多个excel并压缩”的功能需要对Java的文件操作、Excel处理、文件压缩以及Web开发有深入的理解。通过Apache POI库处理Excel,结合Java内置的压缩API,我们可以创建一个高效且可扩展的...

    使用POI实现表格导出jar包.zip

    将这两个目录一起打包成zip文件,即得到"使用POI实现表格导出jar包.zip"。 使用这个jar包时,只需通过Java的`java -jar`命令执行,即可在指定位置生成Excel文件。需要注意的是,由于jar文件包含所有依赖,所以它的...

    java实现向word文档中插入柱状图,并更改颜色

    在实际应用中,这个过程可能会更复杂,因为可能需要处理多个图表、动态数据以及复杂的样式。同时,需要注意的是,直接操作XML可能会破坏文档的结构,因此在修改时要格外小心。Apache POI库提供了丰富的API,虽然可能...

    Aspose-word+license.zip

    在Java环境中,通过Aspose.Words API,开发者可以很容易地将Word文档转换成PDF格式,这在很多业务场景中非常实用,比如报告生成、网页打印预览等。同时,描述中还提到了"wordAspose-words相关jar",这是Aspose.Words...

    各类常见文件格式大全

    - **.java**:Java编程语言的源代码文件,可以使用任何文本编辑器如**记事本**编写,之后通过Java编译器编译成字节码。 #### JavaScript文件 - **.js**:JavaScript脚本文件,用于网页交互效果开发,可以直接在...

    JAVA 范例大全 光盘 资源

    实例92 Java操作Excel文件 237 第11章 Java高级特性 245 实例93 自动装箱与拆箱 245 实例94 for/in循环 247 实例95 参数不确定(可变长参数) 249 实例96 方法改变(协变式返回类型) 251 实例97 静态导入 252...

    2019-5-9-xc-lib.zip

    综上所述,这个压缩包包含了一系列用于Java开发的库,涵盖了报表生成、XML处理、对象到XML映射、Office文档操作、PDF处理以及项目构建等多个方面。这些库对于进行企业级Java应用开发,特别是处理数据转换和报表生成...

    网管教程 从入门到精通软件篇.txt

    Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...

    Highcharts-8.1.2.zip

    多个数据进行对比这是非常常见的需求,Highcharts 可以让你为每个类型的数据添加坐标轴,每个轴可以定义放置的位置,所有的设置都可以独立生效,包括旋转、样式设计和定位,当然也支持多个数据共用一个坐标轴。...

    VB学生信息管理系统【VB】.zip

    设计上遵循模块化原则,将功能划分为几个主要部分:用户管理、学生信息录入、信息查询、成绩管理、报表生成等,每个模块都有明确的功能划分,便于后期的维护和扩展。 二、功能模块详解 1. 用户管理:该模块主要...

Global site tag (gtag.js) - Google Analytics