• Springboot——jxls实现同sheet多个列表展示


    前言

    在之前的博客中Springboot——使用jxls实现excel模板导出excel,具体说明了jxls框架的基本使用。

    除了最简单的单列表展示外,jxls还具有同sheet页展示多个列表的能力,接下来一起继续探究。

    制定模板

    1、限定模板数据的范围

    采取下面的批注,指定需要渲染显示的报表范围。

    这里的范围只考虑第一行的范围!

    命令如下所示:

    jx:area(lastCell=”H15”)
    
    • 1

    在这里插入图片描述

    2、设定报表展示项

    报表一,只显示单条数据。
    在这里插入图片描述

    报表二,进行列表展示,并设置批注,如下所示:

    jx:each(items="dataList2" var="item" lastCell="C8")
    
    • 1

    在这里插入图片描述
    报表三,与报表二中的批注一样,只是接收参数变量名不同。批注如下所示:

    jx:each(items="dataList3" var="item" lastCell="C12")
    
    • 1

    编写测试类

    1、将xls模板文件放于 resource 下的 doc文件夹中

    在这里插入图片描述

    2、导入依赖文件

    
    <dependency>
        <groupId>org.jxlsgroupId>
        <artifactId>jxlsartifactId>
        <version>2.8.1version>
    dependency>
    <dependency>
        <groupId>net.sf.jxlsgroupId>
        <artifactId>jxls-coreartifactId>
        <version>1.0.6version>
    dependency>
    <dependency>
        <groupId>org.jxlsgroupId>
        <artifactId>jxls-poiartifactId>
        <version>2.8.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3、编写接口和导出逻辑

    @RequestMapping("/ss")
    public void download(HttpServletRequest request,HttpServletResponse response) throws Exception {
    
        Map<String, Object> map = new HashMap();
        map.put("name1","xiangjiao");
        map.put("age1","10");
        map.put("are1","中国");
    
        // 报表二
        List<Map<String, Object>> dataList = new ArrayList();
        for (int i = 0; i < 10; i++) {
            Map<String, Object> params = new HashMap<>();
            params.put("name2","1_"+i);
            params.put("age2","xj_"+i);
            params.put("are2",22);
            dataList.add(params);
        }
        // ${item.num}
        map.put("dataList2",dataList);
    
        // 报表三
        List<Map<String, Object>> dataList3 = new ArrayList();
        for (int i = 0; i < 10; i++) {
            Map<String, Object> params = new HashMap<>();
            params.put("name2","1_"+i);
            params.put("age2","xj_"+i);
            params.put("are2",22);
            dataList3.add(params);
        }
        // ${item.num}
        map.put("dataList3",dataList3);
    
        export(map,"test.xls","666.xls",response);
    }
    
    public static void export(Map<String, Object> dataMap, String reportName,String fileName, HttpServletResponse response) throws IOException {
        Resource resource = new ClassPathResource("/doc" +File.separator+ reportName);
        InputStream in = resource.getInputStream();
        // 这里的context是jxls框架上的context内容
        Context context = PoiTransformer.createInitialContext();
        context.toMap().putAll(dataMap);
        Workbook workbook = WorkbookFactory.create(in);
        // Changing name of the first sheet
        workbook.setSheetName(0, "sheet1");
        PoiTransformer transformer = PoiTransformer.createTransformer(workbook);
        OutputStream out = response.getOutputStream();
        transformer.setOutputStream(out);
    
        // 文件名 - 解决中文乱码问题
        String filename = URLEncoder.encode(fileName, "UTF-8");
        // 设置响应编码
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/x-download");
        response.setHeader("Content-Disposition", "attachment;filename=" + filename);
    
        JxlsHelper.getInstance().processTemplate(context, transformer);
        in.close();
    
        out.flush();
        out.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    效果预览

    在这里插入图片描述

    结论

    jxls能够完美的实现样式自定义单数据多报表集成。

  • 相关阅读:
    大聪明教你学Java | RabbitMQ 的工作原理及其简单操作
    仿牛客社区comment表的设计
    129. 求根节点到叶节点数字之和
    vuex的模块化和namespaced
    LiveGBS流媒体平台GB/T28181常见问题-基础配置流媒体服务配置中本地|内网IP外网IP(可选)外网IP收流如何配置
    ESP32网络开发实例-创建Rest API风格Web服务器
    你知道 Java 有哪些引用吗?
    Linux网络编程基础
    《吐血整理》高级系列教程-吃透Fiddler抓包教程(30)-Fiddler如何抓取Android7.0以上的Https包-番外篇
    数据库Redis(二):基本数据类型
  • 原文地址:https://blog.csdn.net/qq_38322527/article/details/133652465