java 导出多个excel_【转】java导出多个excel表格,并压缩成zip输出

/*** 导出支付宝批量支付文件excel

*

*@paramname

*@parambegintime

*@paramendtime

*@paramp

*@paraml

*@paramk

*@paramrequest

*@paramresponse*/@RequestMapping("exportApplyBatchExcel")public voidexportApplyBatchExcel(String name, String begintime, String endtime, Integer p, Integer l, String k,

HttpServletRequest request, HttpServletResponse response) {//if (auth.getCurrentUserId(k) == null) {//ResponseUtil.json(JsonUtil.toString(GenericResponses.TOKEN_LOSE),//response);//return;//}//逐页查询数据,将所有数据导出到excel表中(注:此方法中不传p,l参数,使用的是service层中,默认的第1页开始,每页显示50条)

Integer pp = 1;

Long tt= 1l;

String[] headers= { "批次号", "付款日期", "付款人email", "账户名称", "总金额(元)", "总笔数"};

OutputStream out= null;while (true) {

pp++;//查询数据库

ListResponse> listResponse = this.finApi.selectApplyBatch(name, begintime, endtime, p, l, k);//获取总页数

Long total =listResponse.getTotal();if (tt > 0) {

tt= total -pp;

}else{break;

}//获取查询结果,数据列表

Object result =listResponse.getResult();//类型转换

if (result != null) {

List applyBatchMXVos =JsonUtil.readJsonList(JsonUtil.toString(result),

ApplyBatchMXVo.class);//导出

try{//设置导出excel文件

out =response.getOutputStream();

ZipOutputStream zipOutputStream= newZipOutputStream(out);

String fileName= "批量支付文件" + ".zip";

response.setContentType("application/octet-stream ");

response.setHeader("Connection", "close"); //表示不能用浏览器直接打开

response.setHeader("Accept-Ranges", "bytes");//告诉客户端允许断点续传多线程连接下载

response.setHeader("Content-Disposition","attachment;filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1"));

response.setCharacterEncoding("UTF-8");//遍历填充数据

for(ApplyBatchMXVo vo : applyBatchMXVos) {

List> datas = new ArrayList<>();

List data = new ArrayList<>();

data.add(vo.getId());//批次号

data.add(vo.getCreateTime());//付款时间

data.add(vo.getPayAccount());//付款人email

data.add(vo.getPayName());//账户名称

data.add(vo.getTotalCost());//总金额(元)

data.add(vo.getTotalCount());//总笔数

datas.add(data);

List data2 = new ArrayList<>();//插入第二行表头

data2.add("商户流水号");//商户流水号

data2.add("收款人email");//收款人email

data2.add("收款人姓名");//收款人姓名

data2.add("付款金额(元)");//付款金额(元)

data2.add("付款理由");//付款理由

datas.add(data2);for(ApplyMoneyMXVo amvo : vo.getApplyMoneyMXVos()) {

List data3 = new ArrayList<>();

data3.add(amvo.getApplyNo());//商户流水号

data3.add(amvo.getUserAccount());//收款人email

data3.add(amvo.getUserName());//收款人姓名

data3.add(amvo.getMoney());//付款金额(元)

data3.add(amvo.getPayCase());//付款理由

datas.add(data3);

}//导出文件zip压缩设置

Workbook book = GenerateXmlUtil.generateCreateXsl(headers, datas, "批量支付文件");

ZipEntry entry= new ZipEntry(vo.getId() + ".xls");

zipOutputStream.putNextEntry(entry);

book.write(zipOutputStream);

}//关闭输出流

zipOutputStream.flush();

zipOutputStream.close();

}catch(Exception e) {

e.printStackTrace();

ResponseUtil.text(TraceUtil.trace(e), response);

}

}//重新设置分页参数

p =pp;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现导出多个Excel文件并打包成压缩包,可以使用Java中的ZipOutputStream类来实现。以下是一个简单的示例代码: ```java try { // 创建ZipOutputStream对象 ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream("result.zip")); // 定义要导出Excel文件列表 List<File> excelFiles = new ArrayList<>(); excelFiles.add(new File("data1.xlsx")); excelFiles.add(new File("data2.xlsx")); // 遍历Excel文件列表,逐个写入到压缩包中 for (File excelFile : excelFiles) { // 创建ZipEntry对象,指定压缩包中的文件名 ZipEntry entry = new ZipEntry(excelFile.getName()); zipOut.putNextEntry(entry); // 读取Excel文件内容,并将其写入到ZipOutputStream中 FileInputStream in = new FileInputStream(excelFile); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { zipOut.write(buffer, 0, len); } // 关闭ZipEntry和输入流 in.close(); zipOut.closeEntry(); } // 关闭ZipOutputStream对象 zipOut.close(); } catch (IOException e) { e.printStackTrace(); } ``` 以上示例代码创建了一个ZipOutputStream对象,然后遍历要导出Excel文件列表,逐个将其写入到压缩包中。最后关闭ZipOutputStream对象即可。需要注意的是,在写入每个Excel文件时,都需要先创建一个ZipEntry对象来指定压缩包中的文件名,并调用ZipOutputStream的putNextEntry方法来开始写入该文件;写入完成后需要调用ZipOutputStream的closeEntry方法来结束该文件的写入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值