最近项目中有这样的需求:就是选择页面上的多条记录,每一条记录生成一个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>
分享到:
相关推荐
综上所述,"生成excel并打包成zip文件"这个任务涉及到使用Java编程语言,特别是Apache POI库来生成Excel文件,再结合Java标准库的压缩功能将Excel和文本文件打包成ZIP。整个过程涉及到了文件的创建、写入、压缩和...
"多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...
Java后台批量下载文件并压缩成zip下载的方法 Java后台批量下载文件并压缩成zip下载的方法是指在Java后台中批量下载文件,并将其压缩成zip文件下载到本地桌面。该方法具有重要的参考价值,感兴趣的小伙伴们可以参考...
综上所述,实现“java将数据导入多个excel并压缩”的功能需要对Java的文件操作、Excel处理、文件压缩以及Web开发有深入的理解。通过Apache POI库处理Excel,结合Java内置的压缩API,我们可以创建一个高效且可扩展的...
将这两个目录一起打包成zip文件,即得到"使用POI实现表格导出jar包.zip"。 使用这个jar包时,只需通过Java的`java -jar`命令执行,即可在指定位置生成Excel文件。需要注意的是,由于jar文件包含所有依赖,所以它的...
在实际应用中,这个过程可能会更复杂,因为可能需要处理多个图表、动态数据以及复杂的样式。同时,需要注意的是,直接操作XML可能会破坏文档的结构,因此在修改时要格外小心。Apache POI库提供了丰富的API,虽然可能...
在Java环境中,通过Aspose.Words API,开发者可以很容易地将Word文档转换成PDF格式,这在很多业务场景中非常实用,比如报告生成、网页打印预览等。同时,描述中还提到了"wordAspose-words相关jar",这是Aspose.Words...
- **.java**:Java编程语言的源代码文件,可以使用任何文本编辑器如**记事本**编写,之后通过Java编译器编译成字节码。 #### JavaScript文件 - **.js**:JavaScript脚本文件,用于网页交互效果开发,可以直接在...
实例92 Java操作Excel文件 237 第11章 Java高级特性 245 实例93 自动装箱与拆箱 245 实例94 for/in循环 247 实例95 参数不确定(可变长参数) 249 实例96 方法改变(协变式返回类型) 251 实例97 静态导入 252...
综上所述,这个压缩包包含了一系列用于Java开发的库,涵盖了报表生成、XML处理、对象到XML映射、Office文档操作、PDF处理以及项目构建等多个方面。这些库对于进行企业级Java应用开发,特别是处理数据转换和报表生成...
Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...
多个数据进行对比这是非常常见的需求,Highcharts 可以让你为每个类型的数据添加坐标轴,每个轴可以定义放置的位置,所有的设置都可以独立生效,包括旋转、样式设计和定位,当然也支持多个数据共用一个坐标轴。...
设计上遵循模块化原则,将功能划分为几个主要部分:用户管理、学生信息录入、信息查询、成绩管理、报表生成等,每个模块都有明确的功能划分,便于后期的维护和扩展。 二、功能模块详解 1. 用户管理:该模块主要...