当前位置: 代码网 > it编程>编程语言>Java > jxls2.4.5如何动态导出excel表头与数据

jxls2.4.5如何动态导出excel表头与数据

2024年08月15日 Java 我要评论
在之前的文章中,介绍了jxls的基础使用。但导出表头属于写死的,并未采取动态渲染。本次进行动态渲染操作,动态渲染表头和填充数据。依赖引入springboot测试项目中,引入下列依赖以及版本。<d

在之前的文章中,介绍了jxls的基础使用。但导出表头属于写死的,并未采取动态渲染。

本次进行动态渲染操作,动态渲染表头和填充数据。

依赖引入

springboot测试项目中,引入下列依赖以及版本。

<dependency>
    <groupid>org.jxls</groupid>
    <artifactid>jxls</artifactid>
    <version>2.4.5</version>
</dependency>
<dependency>
    <!-- 可以使用poi的实现也可以用jexcelapi的 -->
    <groupid>org.jxls</groupid>
    <artifactid>jxls-poi</artifactid>
    <version>1.0.15</version>
</dependency>
<dependency>
    <groupid>org.jxls</groupid>
    <artifactid>jxls-jexcel</artifactid>
    <version>1.0.7</version>
</dependency>
<dependency>
    <groupid>net.sf.jxls</groupid>
    <artifactid>jxls-core</artifactid>
    <version>1.0.6</version>
</dependency>

制作导出模板

导出模板依旧采取批注的方式,进行定义内容范围表头区域数据区域

  • a1中的批注如下:
jx:area(lastcell=”a3”)

指定一条数据填充时的范围

  • a2中的批注如下:
jx:grid(lastcell=“a3” headers=“hdatas” data=“bdatas” areas=[a2:a2, a3:a3] formatcells=“bigdecimal:c1,date:d1”)
  • headers指定哪个list集合属于动态表头数据。
  • data 指定使用哪个数据集合作为数据渲染源。
  • areas 指定表头和数据的范围。a2:a2 表示 表头数据的区域。a3:a3 表示 第一个数据单元格所在的区域。
  • formatcells 官方文档说的是指定数据格式,测试时不属于必填项

测试类

package cn.xj.controller;

import com.google.common.collect.lists;
import lombok.extern.slf4j.slf4j;
import org.jxls.common.context;
import org.jxls.util.jxlshelper;
import org.springframework.core.io.classpathresource;
import org.springframework.core.io.resource;
import java.io.*;
import java.util.*;

@slf4j
public class test3 {

    public static void main(string[] args) throws exception {

        //map<string, object> map = new hashmap();
        context context = new context();
        // 动态头
        context.putvar("hdatas", arrays.aslist("编号","名称","年龄","邮箱"));
        // 数据集合
        list<list<object>> datalist = lists.newarraylist();
        for (int i = 0; i < 10; i++) {
            list<object> list = new arraylist<>();
            map<string, object> params = new hashmap<>();
            list.add("1_"+i);
            list.add("xj_"+i);
            list.add(22);
            list.add("专注写bug测试中文");
            datalist.add(list);
        }
        // ${item.num}
        context.putvar("bdatas",datalist);

        resource resource = new classpathresource("/report/test_user2.xlsx");
        inputstream is = resource.getinputstream();

        string outfile = system.getproperty("user.dir")+ file.separator+"springboot-poi"+file.separator+"pdf"+file.separator+system.currenttimemillis()+ ".xlsx";
        outputstream outputstream = new fileoutputstream(outfile);


        jxlshelper.getinstance().processtemplate(is, outputstream, context);

    }

}

导出效果

注意事项

1、表头的数据格式为list<string>

2、数据部分的格式为list<list<object>>。或者list<xxxxpo>,但第2种数据格式暂未进行验证。

3、使用动态表头方式,必须使用org.jxls.common.context来承接数据信息。

context context = new context();
// 动态头
context.putvar(“hdatas”, arrays.aslist(“编号”,“名称”,“年龄”,“邮箱”));
// 数据集合
list<list> datalist = lists.newarraylist();
context.putvar(“bdatas”,datalist);

4、表头与数据单元格部分,必须强制使用${header}${cell}。自定义命名会导致数据不会填充!

总结

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

(0)

相关文章:

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

发表评论

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