EasyExcel 通过模板填充数据
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 通过模板填充数据的更多相关文章
- 用NPOI从DataTable到Excel,向Excel模板填充数据
DataTable---->Excel,填充数据 private IWorkbook workbook = null; private ISheet sheet = null; private ...
- Freemarker取list集合中数据(将模板填充数据后写到客户端HTML)
1.模板写法: <html> <head> <title>freemarker测试</title> </head> <body> ...
- 根据EXCEL模板填充数据
string OutFileName = typeName+"重点源达标率" + DateTime.Now.ToString("yyyy-MM-dd"); ...
- 读取excel模板填充数据 并合并相同文本单元格
try { string OutFileName = "北京市国控企业污染源废气在线比对监测数据审核表" + DateTime.Now.ToString(& ...
- POI3.10读取Excel模板填充数据后生成新的Excel文件
private final DecimalFormat df = new DecimalFormat("#0.00"); public void test(){ String fi ...
- 尝试做一个.NET模板填充导出Excel工具
园友好,最近晚辈延续上篇后尝试进阶做成Excel模板填充数据生成工具 MiniExcel Template. 主要特点 同样以Stream流.延迟查询避免全部数据载入内存情况,做到1GB内存降低到只需 ...
- 借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率
原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升 ...
- Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行
Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行 模版格式,图格式是最简单的格式,但实际效果不是这种,实际效果图如图2 图2 ,注意看红色部分,一对一是正常的,但是有一对多的订单 ...
- Net 自定义Excel模板导出数据
转载自:http://www.cnblogs.com/jbps/p/3549671.html?utm_source=tuicool&utm_medium=referral 1 using Sy ...
- python-Word模板填充-docxtpl
docxtpl 按指定的word模板填充内容 安装 pip install docxtpl 示例 from docxtpl import DocxTemplate data_dic = { 't1': ...
随机推荐
- 分布式配置中心之Apollo
Apollo(阿波罗)是携程开源的一款可靠的分布式配置管理中心,它能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场 ...
- Educational Codeforces Round 102 (Rated for Div
Educational Codeforces Round 102 (Rated for Div. 2) No More Inversions 给定\(k\),序列\(a\)长度为\(n\):\(1,2 ...
- 如何用Docker Compose部署项目?
目录 前言 Docker Compose 1. Docker Compose是什么? 2. Docker Compose 的具体步骤 3. 如何在IDEA项目里面使用Docker Compose 启动 ...
- 【项目学习】Pendle 项目的简单调研
项目介绍 将 1 ETH 质押成 1 stETH,年利率为 5%,那么到期后 1 stETH 就能收回 1 ETH(本金)+ 0.05 ETH(收益).而 Pendle 所做的就是把 1 stETH ...
- Flutter之GetX之Obs
Flutter之GetX之Obs 除了之前说过的GetBuilder,GetX还有其他的状态管理方式 一个后缀就可以把一个变量变得可观察,变量每次改变的时候,使用它的小部件就会被更新 var name ...
- MySQL语句判断数据库数据重复情况,新增、删除、不变。
判断 7月8月两个月数据对比情况,新增.删除(离职).重复. 根据manager_name,gg_name,employer,department,historical_office判断出是否重复数据 ...
- C#中串口类SerialPort类的详细用法
原文链:serialport控件的详细用法
- [转]WorldWind开发中WorldWindowGLCanvas .setPreferredSize()函数找不到
值高温假期,无意翻到了csdn中三维GIS开发的专栏,讲的是worldwind Java三维GIS系统开发的东西,十分感兴趣.恰巧要求的环境已经存在,直接耍起来.将最新的Worldwind和JOGL下 ...
- 为什么在 Windows 下用 Ctrl+Z 退出 Python 而 Linux 下用 Ctrl+D 呢?
打开我们的命令行,输入 python ,我们会进入 python 的交互模式. 当我们想退出 python ,返回我们的 shell 时,你将如何退出? 如上,两个行之有效的方法是输入 exit() ...
- 使用pytorch从零开始实现一个简单的gpt
使用pytorch从零开始实现一个简单的gpt 本文由prompt引导ChatGPT生成简易版gpt模型,根据比较关心的问题,使用了以下的prompt进行内容和代码的生成: prompt:->如 ...