jxls 2.4.5 —— 动态导出excel 表头与数据

文章目录

  • 前言
  • 依赖引入
  • 制作导出模板
  • 测试类
  • 导出效果
  • 注意事项

前言

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

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

依赖引入

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

<dependency>
    <groupId>org.jxlsgroupId>
    <artifactId>jxlsartifactId>
    <version>2.4.5version>
dependency>
<dependency>
    
    <groupId>org.jxlsgroupId>
    <artifactId>jxls-poiartifactId>
    <version>1.0.15version>
dependency>
<dependency>
    <groupId>org.jxlsgroupId>
    <artifactId>jxls-jexcelartifactId>
    <version>1.0.7version>
dependency>
<dependency>
    <groupId>net.sf.jxlsgroupId>
    <artifactId>jxls-coreartifactId>
    <version>1.0.6version>
dependency>

制作导出模板

导出模板依旧采取批注的方式,进行定义内容范围表头区域数据区域
jxls 2.4.5 —— 动态导出excel 表头与数据_第1张图片
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 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);

    }

}

导出效果

jxls 2.4.5 —— 动态导出excel 表头与数据_第2张图片

注意事项

  • 1、表头的数据格式为List
  • 2、数据部分的格式为List>。或者List,但第2种数据格式暂未进行验证。
  • 3、使用动态表头方式,必须使用org.jxls.common.Context来承接数据信息。

Context context = new Context();
// 动态头
context.putVar(“hDatas”, Arrays.asList(“编号”,“名称”,“年龄”,“邮箱”));
// 数据集合
List dataList = Lists.newArrayList();
context.putVar(“bDatas”,dataList);

  • 4、表头与数据单元格部分,必须强制使用${header}${cell}。自定义命名会导致数据不会填充!
    jxls 2.4.5 —— 动态导出excel 表头与数据_第3张图片
    jxls 2.4.5 —— 动态导出excel 表头与数据_第4张图片

你可能感兴趣的:(ireport报表工具,excel,jxls)