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

 更新时间:2024年08月15日 10:04:30   作者:专注写bug  
这篇文章主要介绍了jxls2.4.5如何动态导出excel表头与数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在之前的文章中,介绍了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}。自定义命名会导致数据不会填充!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 如何给对象中的包装类设置默认值

    java 如何给对象中的包装类设置默认值

    这篇文章主要介绍了java 如何给对象中的包装类设置默认值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 简单的java读取文件示例分享

    简单的java读取文件示例分享

    这篇文章主要介绍了java读取txt文件内容,示例很简单,代码里有注释,大家直接看代码吧
    2014-01-01
  • springboot验证码生成以及验证功能举例详解

    springboot验证码生成以及验证功能举例详解

    登录注册是大部分系统需要实现的基本功能,同时也会对登录验证增加需求,下面这篇文章主要给大家介绍了关于springboot验证码生成以及验证功能的相关资料,需要的朋友可以参考下
    2023-04-04
  • java中的快捷键小结

    java中的快捷键小结

    以下是myeclipse中的所有快捷键列表
    2013-03-03
  • SpringAOP中的通知Advice解析

    SpringAOP中的通知Advice解析

    这篇文章主要介绍了SpringAOP中的通知Advice解析,AOP 中的通知是基于连接点业务逻辑的一种增强,Spring AOP 可以基于 XML 方式和基于注解方式定义,只是写法不同,这里只使用注解的方式来讲解通知的详细用法,需要的朋友可以参考下
    2023-09-09
  • springboot后端配置多个数据源、Mysql数据库的便捷方法

    springboot后端配置多个数据源、Mysql数据库的便捷方法

    实现springboot 后端配置多个数据源、Mysql数据库,只需要新建 Mapper、实体类 相应的文件夹,将不同数据源的文件保存到对应的文件夹下,添加绑定数据库配置Config,就可以轻松完成
    2021-08-08
  • 利用maven命令指定配置文件打包springboot项目

    利用maven命令指定配置文件打包springboot项目

    这篇文章主要介绍了利用maven命令指定配置文件打包springboot项目,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • SpringBoot YAML语法基础详细整理

    SpringBoot YAML语法基础详细整理

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 一天时间用Java写了个飞机大战游戏,朋友直呼高手

    一天时间用Java写了个飞机大战游戏,朋友直呼高手

    前两天我发现论坛有两篇飞机大战的文章异常火爆,但都是python写的,竟然不是我大Java,说实话作为老java选手,我心里是有那么一些失落的,今天特地整理了这篇文章,需要的朋友可以参考下
    2021-05-05
  • springboot Controller直接返回String类型带来的乱码问题及解决

    springboot Controller直接返回String类型带来的乱码问题及解决

    文章介绍了在Spring Boot中,当Controller直接返回String类型时可能出现的乱码问题,并提供了解决办法,通过在`application.yaml`中设置请求和响应的编码格式,并在自定义配置类中进行配置,可以有效解决这一问题
    2024-11-11

最新评论