1、直接献出代码

  1. Map<String,List<ConfidentialInformation>> typeMap = new HashMap<>();
  2. try {
  3. //设置导出
  4. response.addHeader("Cache-Control","no-cache");
  5. response.setCharacterEncoding("UTF-8");
  6. response.setContentType("application/octet-stream;charset=UTF-8");
  7. String ua = request.getHeader("user-agent");
  8. ua = ua == null ? null : ua.toLowerCase();
  9. String docFileName = dateMonth.toString()+"月凭证信息情况.zip";
  10. if(ua != null && (ua.indexOf("firefox") > 0 || ua.indexOf("safari")>0)){
  11. try {
  12. docFileName = new String(docFileName.getBytes(),"ISO8859-1");
  13. response.addHeader("Content-Disposition","attachment;filename=" + docFileName);
  14. } catch (Exception e) {
  15. }
  16. }else{
  17. try {
  18. docFileName = URLEncoder.encode(docFileName, "utf-8");
  19. response.addHeader("Content-Disposition","attachment;filename=" + docFileName);
  20. } catch (Exception e) {
  21. }
  22. }
  23.  
  24. ByteArrayOutputStream out = new ByteArrayOutputStream();
  25. ZipOutputStream zipOut = new ZipOutputStream(out);
  26.  
  27. byte[]buffer=new byte[1024];
  28. for (String names:typeMap.keySet()){
  29. Map<String,Object> outMaps = new HashMap<>();
  30.  
  31. outMaps.put( "datac",typeMap.get( names ) );
  32.  
  33. //Excel处理成zip包
  34. XLSTransformer transformer = new XLSTransformer();
  35. String srcFilePath = request.getServletContext().getRealPath("/")+"/export/template/credentialReport.xls";
  36.  
  37. InputStream is = new BufferedInputStream(new FileInputStream(srcFilePath));
  38. Workbook workbook =null;
  39.  
  40. workbook = transformer.transformXLS(is, outMaps);
  41.  
  42. //压缩包zip留。
  43. ByteArrayOutputStream outtemp = new ByteArrayOutputStream();
  44. workbook.write(outtemp);
  45. ByteArrayInputStream bais =new ByteArrayInputStream(outtemp.toByteArray());
  46. String nickname = ResourceUtil.getCacheDicDetail("apportion",names,"typename");
  47. zipOut.putNextEntry(new ZipEntry(nickname+"凭证信息表.xls"));
  48. int dataLen;
  49. //读入需要下载的文件的内容,打包到zip文件
  50. while((dataLen=bais.read(buffer))>0){
  51. zipOut.write(buffer,0,dataLen);
  52.  
  53. }
  54. zipOut.closeEntry();
  55. bais.close();
  56. outtemp.close();
  57. is.close();
  58.  
  59. }
  60. zipOut.close();
  61. out.close();
  62.  
  63. byte[] zipByte=out.toByteArray();
  64.  
  65. OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
  66. toClient.write(zipByte);
  67. toClient.flush();
  68.  
  69. }catch (Exception e){
  70. e.printStackTrace();
  71. }

  

jeecg项目将workbook 的Excel流添加到zip压缩包里导出的更多相关文章

  1. [java][JEECG] Maven settings.xml JEECG项目初始化 RouYi settings.xml配置

    好吧一下是经验之谈,原本这些坑不应该躺的,从头看手册完全可以避免这些. 懒得整理了,看懂了就看,看不懂自己琢磨JEECG的帮助文档去,不过嘛我喜欢用Intelij IDEA,他里面都是别的IDE,不喜 ...

  2. Excel中添加并使用宏实现批量更新数据

    一.状况描述    当我们需要后台更新大量数据的时候,可以使用该功能.二.解決方案    (1)新建一个Excel文件,并另存为启用宏的Excel工作簿,扩展名为.xlsm.    (2)在Excel ...

  3. Myeclipse的web项目移植到Eclipse中需要添加的包

    3.jstl.jar 4.standard-1.1.2.jar 把Myeclipse的web项目一直到Eclipse当中需要添加的包主要有一下4个: 1.servlet-api.jar 2.jsp-a ...

  4. jeecg项目子窗口获得父窗口元素id

    jeecg项目子窗口获得父窗口元素id, var parentWin = frameElement.api.opener;alert($(parentWin.document).find(" ...

  5. 给你的流添加缓冲装置——字节块ByteChunk

    这是一个很重要的一个字节数组处理缓冲工具,它封装了字节缓冲器及对字节缓冲区的操作,包括对缓冲区的写入.读取.扩展缓冲区大小等等,另外还提供相应字符编码的转码操作.此工具让缓冲操作变得更加方便,除了缓冲 ...

  6. iOS - UICollectionView 瀑布流 添加表头视图的坑

    UICollectionView 瀑布流 添加表头视图的坑 首先是,需求加了个头视图在顶部,在collectionView中的头视图跟TableView的不一样,TableView的表头只要设置tab ...

  7. excel怎么设置密码保护?Excel文件添加密码保护教程

    excel怎么设置密码保护?Excel文件添加密码保护教程 众所周知,Excel具有强大的数据处理和数据分析能力,广泛应用于加工学统计及金融统计中.特别是金融统计需要较高的安全性,那么就一定要为Exc ...

  8. 基于.NetCore开发博客项目 StarBlog - (10) 图片瀑布流

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  9. python 导出数据到excel 中,一个好用的导出数据到excel模块,XlsxWriter

    最近公司有项目需要导出数据到excel,首先想到了,tablib,xlwt,xlrd,xlwings,win32com[还可以操作word],openpyxl,等模块但是 实际操作中tablib 写入 ...

随机推荐

  1. jmeter之HTTP信息管理器、正则表达式联合使用(获取登录session

    如图所示,信息管理头的信息为请求头信息,如图所示 注意事项:1)body date里面的参数要是要注意英文编写条件下,可以通过https://www.json.cn/在线的json格式刷格式 2)注意 ...

  2. outlook 使用临时邮箱 使用旧数据

    控制面板-->邮件32位 显示配置文件 删除再添加 具体可参考 https://blog.csdn.net/liuyukuan/article/details/80043840 偷懒,图片从网上 ...

  3. Google为远程入侵Titan M芯片提供最高150万美元的赏金

    Google最近发布了一项新的公告,旨在提高对发现和报告Android操作系统中的严重漏洞的漏洞赏金的奖励,Google昨天为黑客设定了新的挑战性水平,使他们可以赢得高达150万美元的赏金. 从今天开 ...

  4. NOIP提高组2016总结

    前言 大翻车! 300--: day1 8:30~9:00, 照常看题,思考. 9:00~9:15, 搞定第一题,很水. 9:15~9:45, 思考第二题,我考虑用分深度来处理,想出个个玄学暴力,但刚 ...

  5. Java——静态类型 实际类型

    public class test { static class father { void run() { System.out.println("father run"); } ...

  6. 算法复习-a 到 z不完全排列生成

    在网上看到这个题,觉得很有意思,也算是一种方法...但是复杂度同样很高,生成全排列本身需要很大复杂度. 题目:现在有 a 到 z 26 个元素, 编写程序打印 a 到 z 中任取 3 个元素的组合(比 ...

  7. linux操作目录命令之mkdir与rmdir

    一.mkdir  创建目录(一个或多个目录) mkdir -m 777 -p path 1)-m  对新建目录设置权限 2)-p  可以是一个路径名称.此时若路径的某一级目录尚不存在,使有该选项后系统 ...

  8. linux 系统时间 硬件时间

    Linux时钟分为系统时钟(System Clock)和硬件时钟(Real Time Clock,简称RTC).系统时钟是指当前Linux Kernel中的时钟:而硬件时钟则是主板上由电池供电的时钟, ...

  9. ASP.NET大文件断点上传

    HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...

  10. 为什么C++中只有指针和引用才能实现多态?

    代码: class A { public: virtual void Debug(){} }; class B:public A { public: virtual void Debug(){} }; ...