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': ...
随机推荐
- 在vue中使用html2canvas生成图片
首先,在vue中引入html2canvas,执行命令 npm install --save html2canvas 然后在需要生成图片的页面中引入 import html2canvas from 'h ...
- laravel之model
记录laravel 中model常用方法 1.keyBy() 指定数据的某个字段作为该条数据的key 2.like操作 $model->where('goods', 'like', '%test ...
- Django Admin之常用功能汇总
1.字段支持下拉搜索框 1)在admin中新增字段autocomplete_fields autocomplete_fields = ("field1","field2& ...
- Laravel环境搭建之HomeStead
开发laravel,官方推荐使用HomeStead虚拟环境进行搭建. Linux: 1. 安装virtualbox(https://www.virtualbox.org/) 1)可以找到可供下载的镜像 ...
- php7.4.x~php8.0.x 新特性
PHP 核心中的新特性 命名参数 新增 命名参数 的功能. // array_fill(int $start_index, int $count, mixed $value): array // 使用 ...
- Redis原理—4.核心原理摘要
大纲 1.Redis服务器的Socket网络连接建立 2.Redis多路复用监听与文件事件模型 3.基于队列串行化的文件事件处理机制 4.完整的Redis Server网络通信流程 5.Redis串行 ...
- ES6 面试题
新增了哪些属性? 新增块级作用域:let.const 新增数据类型:Symbol 表示独一无二的值 新增数据结构: Set,类似数组,所有数据是唯一的: Map,键值对的结合,传统的 Object 只 ...
- 【MyBatis】学习笔记05:获取参数值的两种方式
[Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 [MyBatis]学习笔记03:配置文件进一步解读(非常重要) [MyBatis]学习笔记04:配 ...
- Qt编写物联网管理平台39-报警联动
一.前言 本系统支持报警联动,就是某个探测器报警后,再去下发命令,通知下面的继电器警号,一般是通过串口发送,由于现场会利用现有的串口线路比如485总线,所以本系统需要做特殊处理,就是公用485通信总线 ...
- Qt开源作品24-遮罩层窗体
一.前言 在有些项目中,需要在弹框的窗体背后遮罩原有主窗体,使得突出显示弹窗窗体,突然想到之前写过一个全局截屏的东东,原理一致,拿来改改.只需要引入一个头文件和实现文件,然后在主窗体中设置下需要遮罩的 ...