当前位置: 代码网 > it编程>编程语言>Java > Springboot使用jxls实现同sheet多个列表展示

Springboot使用jxls实现同sheet多个列表展示

2024年08月15日 Java 我要评论
前言在之前的文章中springboot——使用jxls实现excel模板导出excel,具体说明了jxls框架的基本使用。除了最简单的单列表展示外,jxls还具有同sheet页

前言

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

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

制定模板

1、限定模板数据的范围

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

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

命令如下所示:

jx:area(lastcell=”h15”)

2、设定报表展示项

报表一,只显示单条数据。

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

jx:each(items="datalist2" var="item" lastcell="c8")

报表三,与报表二中的批注一样,只是接收参数变量名不同。

批注如下所示:

jx:each(items="datalist3" var="item" lastcell="c12")

编写测试类

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

2、导入依赖文件

<!-- excel 填充 -->
<dependency>
    <groupid>org.jxls</groupid>
    <artifactid>jxls</artifactid>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupid>net.sf.jxls</groupid>
    <artifactid>jxls-core</artifactid>
    <version>1.0.6</version>
</dependency>
<dependency>
    <groupid>org.jxls</groupid>
    <artifactid>jxls-poi</artifactid>
    <version>2.8.1</version>
</dependency>

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();
}

效果预览

结论

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com