EasyExcel 通过模板填充数据两种方式:1、直接通过模板填充。2、通过IO流填充。

模板示例

注意:单个字段填充只写字段名即可,数据集填充需要在字段前加 .

{title}
姓名 昵称 手机号
{.username} {.nickname} {.phone}

代码示例:

package com.service.single.example.excel;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.service.single.entity.SystemUser; import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* @Author: 一休
* @Date: 2025/2/10
*/
public class ExcelTemplate { public static void main(String[] args) throws IOException {
// 准备数据
List<SystemUser> users = new ArrayList<>();
SystemUser user1 = new SystemUser();
user1.setUsername("张三");
user1.setNickname("zhangsan");
user1.setPhone("11111");
users.add(user1);
SystemUser user2 = new SystemUser();
user2.setUsername("张三");
user2.setNickname("zhangsan");
user2.setPhone("11111");
users.add(user2);
// 单个字段填充,使用map格式
Map<String, Object> otherData = new HashMap<>();
otherData.put("title", "系统用户表");
// 模板文件路径
String templateFileName = "src/main/resources/template.xlsx";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String formattedDateTime = LocalDateTime.now().format(formatter);
// 输出文件路径
String outputFileName = "src/main/resources/filled_template_" + formattedDateTime + ".xlsx";
// 输出文件路径
String outputFileName1 = "src/main/resources/filled_template1_" + formattedDateTime + ".xlsx"; // 1、直接通过文件模板填充
try (ExcelWriter excelWriter = EasyExcel.write(outputFileName).withTemplate(templateFileName).build();) {
// 创建写入工作表
WriteSheet writeSheet = EasyExcel.writerSheet().build();
// 每次使用 list 参数时创建新行。
FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
// 针对某个字段填充
excelWriter.fill(otherData, fillConfig, writeSheet);
// 填充集合
excelWriter.fill(users, fillConfig, writeSheet);
} // 2、通过IO流填充
try (
// 使用 try-with-resources 管理输入流
InputStream inputStream = Files.newInputStream(Paths.get(templateFileName));
InputStream templateInputStream = new BufferedInputStream(inputStream);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream()
) {
try (
// 创建 ExcelWriter 对象
ExcelWriter excelWriter = EasyExcelFactory.write(outputStream).excelType(ExcelTypeEnum.XLSX).withTemplate(templateInputStream).build()
) {
WriteSheet writeSheet = EasyExcelFactory.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
// 针对某个字段填充
excelWriter.fill(otherData, fillConfig, writeSheet);
// 填充集合
excelWriter.fill(users, fillConfig, writeSheet);
} try (
FileOutputStream fileOutputStream = new FileOutputStream(outputFileName1)
) {
outputStream.writeTo(fileOutputStream);
// 刷新 FileOutputStream 缓冲区,确保数据全部写入文件
fileOutputStream.flush();
System.out.println("文件生成成功: " + outputFileName1);
}
}
}
}

EasyExcel 通过模板填充数据的更多相关文章

  1. 用NPOI从DataTable到Excel,向Excel模板填充数据

    DataTable---->Excel,填充数据 private IWorkbook workbook = null; private ISheet sheet = null; private ...

  2. Freemarker取list集合中数据(将模板填充数据后写到客户端HTML)

    1.模板写法: <html> <head> <title>freemarker测试</title> </head> <body> ...

  3. 根据EXCEL模板填充数据

    string OutFileName = typeName+"重点源达标率" + DateTime.Now.ToString("yyyy-MM-dd");    ...

  4. 读取excel模板填充数据 并合并相同文本单元格

    try             { string OutFileName = "北京市国控企业污染源废气在线比对监测数据审核表" + DateTime.Now.ToString(& ...

  5. POI3.10读取Excel模板填充数据后生成新的Excel文件

    private final DecimalFormat df = new DecimalFormat("#0.00"); public void test(){ String fi ...

  6. 尝试做一个.NET模板填充导出Excel工具

    园友好,最近晚辈延续上篇后尝试进阶做成Excel模板填充数据生成工具 MiniExcel Template. 主要特点 同样以Stream流.延迟查询避免全部数据载入内存情况,做到1GB内存降低到只需 ...

  7. 借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率

    原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升 ...

  8. Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行

    Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行 模版格式,图格式是最简单的格式,但实际效果不是这种,实际效果图如图2 图2 ,注意看红色部分,一对一是正常的,但是有一对多的订单 ...

  9. Net 自定义Excel模板导出数据

    转载自:http://www.cnblogs.com/jbps/p/3549671.html?utm_source=tuicool&utm_medium=referral 1 using Sy ...

  10. python-Word模板填充-docxtpl

    docxtpl 按指定的word模板填充内容 安装 pip install docxtpl 示例 from docxtpl import DocxTemplate data_dic = { 't1': ...

随机推荐

  1. 分布式配置中心之Apollo

    Apollo(阿波罗)是携程开源的一款可靠的分布式配置管理中心,它能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场 ...

  2. Educational Codeforces Round 102 (Rated for Div

    Educational Codeforces Round 102 (Rated for Div. 2) No More Inversions 给定\(k\),序列\(a\)长度为\(n\):\(1,2 ...

  3. 如何用Docker Compose部署项目?

    目录 前言 Docker Compose 1. Docker Compose是什么? 2. Docker Compose 的具体步骤 3. 如何在IDEA项目里面使用Docker Compose 启动 ...

  4. 【项目学习】Pendle 项目的简单调研

    项目介绍 将 1 ETH 质押成 1 stETH,年利率为 5%,那么到期后 1 stETH 就能收回 1 ETH(本金)+ 0.05 ETH(收益).而 Pendle 所做的就是把 1 stETH ...

  5. Flutter之GetX之Obs

    Flutter之GetX之Obs 除了之前说过的GetBuilder,GetX还有其他的状态管理方式 一个后缀就可以把一个变量变得可观察,变量每次改变的时候,使用它的小部件就会被更新 var name ...

  6. MySQL语句判断数据库数据重复情况,新增、删除、不变。

    判断 7月8月两个月数据对比情况,新增.删除(离职).重复. 根据manager_name,gg_name,employer,department,historical_office判断出是否重复数据 ...

  7. C#中串口类SerialPort类的详细用法

    原文链:serialport控件的详细用法

  8. [转]WorldWind开发中WorldWindowGLCanvas .setPreferredSize()函数找不到

    值高温假期,无意翻到了csdn中三维GIS开发的专栏,讲的是worldwind Java三维GIS系统开发的东西,十分感兴趣.恰巧要求的环境已经存在,直接耍起来.将最新的Worldwind和JOGL下 ...

  9. 为什么在 Windows 下用 Ctrl+Z 退出 Python 而 Linux 下用 Ctrl+D 呢?

    打开我们的命令行,输入 python ,我们会进入 python 的交互模式. 当我们想退出 python ,返回我们的 shell 时,你将如何退出? 如上,两个行之有效的方法是输入 exit() ...

  10. 使用pytorch从零开始实现一个简单的gpt

    使用pytorch从零开始实现一个简单的gpt 本文由prompt引导ChatGPT生成简易版gpt模型,根据比较关心的问题,使用了以下的prompt进行内容和代码的生成: prompt:->如 ...