李白(唐)
金樽清酒斗十千,玉盘珍羞直万钱。
停杯投箸不能食,拔剑四顾心茫然。
欲渡黄河冰塞川,将登太行雪满山。
闲来垂钓碧溪上,忽复乘舟梦日边。
行路难,行路难,多歧路,今安在?
长风破浪会有时,直挂云帆济沧海。
背景
在需要处理Excel模板输出的业务场景中,可以使用阿里系的Easy Excel也可以使用jxls,在基本需求的使用和输出上,个人感觉easyExcel代码简单,jxls相对复杂一点点,但jxls能够处理的场景更复杂,比如需要合并表格的情况。如下所示:
依赖引入
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>2.14.0</version>
</dependency>
目前引入的jxls版本2,其最新的是3。在表格合并上2也是可以处理的。
代码示例
模板的制作
批注解释
java代码
package org.jeecg.modules.archives.controller;
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import org.jeecg.modules.archives.entity.ArchivesIntegral;
import org.jeecg.modules.archives.entity.ArchivesIntegralDetails;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import java.io.*;
import java.nio.file.Files;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class IntegralDemo {
public static void main(String[] args) throws IOException {
InputStream is = FileUtil.getInputStream(new File("d:/template.xls"));
// 新建文件
File file = new File("d:/template_out.xls");
// 流
OutputStream os = new BufferedOutputStream(Files.newOutputStream(file.toPath()));
// 定义数据 使用Context类型
Context context = new Context();
context.putVar("json",data());
// 数据写入模板
JxlsHelper.getInstance().processTemplate(is, os, context);
}
public static List<JSONObject> data(){
List<JSONObject> json = new LinkedList<>();
JSONObject zhangSan = new JSONObject();
zhangSan.put("name","张三");
zhangSan.put("index",1);
zhangSan.put("gender","男");
zhangSan.put("birthday", LocalDate.of(1995,3,8));
List<JSONObject> zhangSanGrade = new LinkedList<>();
JSONObject zhangSanGrade1 = new JSONObject();
zhangSanGrade1.put("matchDate",LocalDate.of(2019,1,1));
zhangSanGrade1.put("rank","第4名");
JSONObject zhangSanGrade2 = new JSONObject();
zhangSanGrade2.put("matchDate",LocalDate.of(2020,2,13));
zhangSanGrade2.put("rank","第3名");
zhangSanGrade.add(zhangSanGrade1);
zhangSanGrade.add(zhangSanGrade2);
zhangSan.put("grade",zhangSanGrade);
JSONObject liSi = new JSONObject();
liSi.put("name","李四");
liSi.put("index",2);
liSi.put("gender","男");
liSi.put("birthday", LocalDate.of(1997,4,7));
List<JSONObject> liSiGrade = new LinkedList<>();
JSONObject liSiGrade1 = new JSONObject();
liSiGrade1.put("matchDate",LocalDate.of(2022,1,18));
liSiGrade1.put("rank","第1名");
JSONObject liSiGrade2 = new JSONObject();
liSiGrade2.put("matchDate",LocalDate.of(2023,2,1));
liSiGrade2.put("rank","第2名");
liSiGrade.add(liSiGrade1);
liSiGrade.add(liSiGrade2);
liSi.put("grade",liSiGrade);
json.add(zhangSan);
json.add(liSi);
return json;
}
}