springboot整合Excel填充数据

 

填充一组数据

准备模板

封装数据

import java.util.ArrayList;
import java.util.List;/*** 使用实体类封装填充数据**  实体中成员变量名称需要和Excel表各种{}包裹的变量名匹配*/
@Data
public class FillData {private String name;private int age;// 生成多组数据代码public static List<FillData> initFillData() {ArrayList<FillData> fillDatas = new ArrayList<FillData>();for (int i = 0; i < 10; i++) {FillData fillData = new FillData();fillData.setName("学生0" + i);fillData.setAge(10 + i);fillDatas.add(fillData);}return fillDatas;}
}

 类填充形式

    @Testpublic void test1(){// 加载模板String templateFile="src/main/resources/excel/templte/fill_data_template1.xlsx";// 写入文件String targetFileName = "单组数据填充.xlsx";// 准备对象数据填充FillData fillData = new FillData();fillData.setName("学生1");fillData.setAge(10);// 生成工作簿对象ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile);// 获取工作表并填充workBookWriter.sheet().doFill(fillData);}

Map形式填充 

 @Testpublic void test1(){// 加载模板String templateFile="src/main/resources/excel/templte/fill_data_template1.xlsx";// 写入文件String targetFileName = "单组数据填充.xlsx";// 生成工作簿对象ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile);//         使用Map数据填充HashMap<String, String> mapFillData = new HashMap<>();mapFillData.put("name", "学生1");mapFillData.put("age", "11");// 获取第一个工作表填充并自动关闭流workBookWriter.sheet().doFill(mapFillData);}

结果 

填充多组数据

准备模板

注意模板里面与上面相比是多了.的

封装数据

与上面一样,省略。

填充

@Testpublic void test02(){// 加载模板String templateFile="src/main/resources/excel/templte/fill_data_template2.xlsx";// 写入文件String targetFileName = "多组数据填充.xlsx";List<FillData> fillDatas = FillData.initFillData();System.out.println(fillDatas);// 生成工作簿对象ExcelWriterBuilder workBookWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile);// 获取第一个工作表填充并自动关闭流workBookWriter.sheet().doFill(fillDatas);}

结果

组合填充

准备模板

即有多组数据填充,又有单一数据填充 。 

封装数据

同上。

填充

 @Testpublic void test03(){// 加载模板String templateFile="src/main/resources/excel/templte/fill_data_template3.xlsx";// 目标文件String targetFileName = "组合数据填充.xlsx";List<FillData> fillDatas = FillData.initFillData();// 生成工作簿对象ExcelWriter excelWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile).build();// 生成工作表对象WriteSheet writeSheet = EasyExcel.writerSheet().build();// 组合填充时,因为多组填充的数据量不确定,需要在多组填充完之后另起一行FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();// 填充并换行excelWriter.fill(fillDatas, fillConfig, writeSheet);HashMap<String, String> otherData = new HashMap<>();otherData.put("date", "2020-03-14");otherData.put("total", "100");excelWriter.fill(otherData, writeSheet);// 关闭excelWriter.finish();}

 结果

水平填充

准备模板

水平填充和多组填充模板一样,不一样的地方在于,填充时需要通过FillConfig对象设置水平填充。  

封装数据

同上

填充

@Testpublic void test04(){// 加载模板String templateFile="src/main/resources/excel/templte/fill_data_template4.xlsx";// 写入文件String targetFileName = "水平数据填充.xlsx";List<FillData> fillDatas = FillData.initFillData();// 生成工作簿对象ExcelWriter excelWriter = EasyExcel.write(targetFileName,FillData.class).withTemplate(templateFile).build();// 生成工作表对象WriteSheet writeSheet = EasyExcel.writerSheet().build();// 组合填充时,因为多组填充的数据量不确定,需要在多组填充完之后另起一行FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();// 填充excelWriter.fill(fillDatas, fillConfig, writeSheet);// 关闭excelWriter.finish();}

结果

资料

常用类

  • EasyExcel 入口类,用于构建开始各种操作;

  • ExcelReaderBuilder 构建出一个ReadWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;

  • ExcelWriterBuilder 构建出一个WriteWorkbook对象,即一个工作簿对象,对应的是一个Excel文件;

  • ExcelReaderSheetBuilder 构建出一个ReadSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;

  • ExcelWriterSheetBuilder 构建出一WriteSheet对象,即一个工作表的对象,对应的Excel中的每个sheet,一个工作簿可以有多个工作表;

  • ReadListener 在每一行读取完毕后都会调用ReadListener来处理数据,我们可以把调用service的代码可以写在其invoke方法内部;

  • WriteHandler 在每一个操作包括创建单元格、创建表格等都会调用WriteHandler来处理数据,对使用者透明不可见;

  • 所有配置都是继承的 Workbook的配置会被Sheet继承。所以在用EasyExcel设置参数的时候,在EasyExcel…sheet()方法之前作用域是整个sheet,之后针对单个sheet。

读取时的注解

@ExcelProperty

属性名含义说明
index对应Excel表中的列数默认-1,建议指定时从0开始
value对应Excel表中的列头
converter成员变量转换器自定义转换器需要实Converter接口

@ExcelIgnore

标注在成员变量上,默认所有字段都会和excel去匹配,加了这个注解会忽略该字段  

@DateTimeFormat

标注在成员变量上,日期转换,代码中用String类型的成员变量去接收excel中日期格式的数据会调用这个注解。里面的value参照java.text.SimpleDateFormat

@NumberFormat

标注在成员变量上,数字转换,代码中用String类型的成员变量去接收excel数字格式的数据会调用这个注解。里面的value参照java.text.DecimalFormat

@ExcelIgnoreUnannotated

标注在类上。不标注该注解时,默认类中所有成员变量都会参与读写,无论是否在成员变量上加了@ExcelProperty 的注解。标注该注解后,类中的成员变量如果没有标注@ExcelProperty 注解将不会参与读写。

@ExcelProperty

属性名含义说明
index对应Excel表中的列数默认-1,指定时建议从0开始
value对应Excel表中的列头
converter成员变量转换器自定义转换器需要实Converter接口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/63969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线问答和智能问答的区别在哪儿?如何搭建问答库?

在线问答和智能问答是两个不同的概念&#xff0c;虽然它们都是用来回答用户提出的问题&#xff0c;但在实现方式、功能和应用场景上有一些区别。 在线问答系统是一种基于互联网的问答服务&#xff0c;提供给用户一个平台&#xff0c;让他们可以提问问题并获取答案。在线问答系…

java八股文面试[数据库]——慢查询优化

分析慢查询日志 直接分析慢查询日志&#xff0c; mysql使用explain sql语句进行模拟优化器来执行分析。 oracle使用explain plan for sql语句进行模拟优化器来执行分析。 table | type | possible_keys | key |key_len | ref | rows | Extra EXPLAIN列的解释&#xff1a; ta…

【CSS】CSS 布局——定位

在CSS&#xff08;层叠样式表&#xff09;中&#xff0c;定位是一种用来控制元素在网页上的布局位置的技术。CSS提供了不同的定位属性&#xff0c;用于控制元素相对于其父元素或文档视口的位置。 CSS中常用的定位属性 静态定位&#xff08;static&#xff09;&#xff1a; 这是…

Mysql查询(SELECT)

基本查询&#xff1a;SELECT FROM SELECT 查询字段 FROM 表名; SELECT * FROM userinfo; 条件查询&#xff1a;用where表示查询条件 SELECT 查询字段 FROM 表名 WHERE 条件; 模糊查询&#xff1a;like %匹配0或多个字符&#xff0c;一般不用左模糊&#xff08;%放在左边&…

【电子取证篇】汽车取证检验标准

【电子取证篇】汽车取证检验标准 汽车取证鉴定可能涉及的测试/测量方法—【蘇小沐】 GA/T 976-2012《电子数据法庭科学鉴定通用方法》&#xff1b; GA/T 1998-2022《汽车车载电子数据提取技术规范》&#xff1b; GA/T 1999.2-2022《道路交通事故车辆速度鉴定方法 第2部分&…

windows使用-设置windows的远程访问用户数量

文章目录 前言相关操作总结前言 作为IT工程师,使用服务器做相应的软件操作时常有的事。最近一段时间,我们的团队多个成员都需要远程登录到一台windows2003Server的服务器处理相应的业务。而默认情况下,Windows系统只允许一名用户远程到服务器上,这给小伙伴的工作造成一些不…

时序预测 | MATLAB实现AR、ARMA、ARIMA时间序列预测模型答疑

时序预测 | MATLAB实现AR、ARMA、ARIMA时间序列预测模型答疑 目录 时序预测 | MATLAB实现AR、ARMA、ARIMA时间序列预测模型答疑基本介绍程序设计参考资料基本介绍 AR自回归模型(Autoregressive Model),通常简称为AR模型,是一种用于时间序列分析和预测的统计模型。它基于时间…

docker与phpstudy两种方式部署wordpress 并 开启伪静态

实际测试&#xff0c;可能是docker内存限制的缘故&#xff0c;docker部署的会比较卡 下载 wordpress phpstudy phpstudy中伪静态配置 伪静态 正常访问 WordPress 文章页的 URL 地址为 http://asa/index.php?p123。变成伪静态就是http://asa/123.html 。 伪静态是相对真实静…

Kubernetes技术--k8s核心技术Controller控制器

1.Controller概述 Controller是在集群上管理和运行容器的对象。是一个实际存在的对象。 2.pod和Controller之间的关系 pod通过controller实现应用的运维,包括伸缩、滚动升级等操作。 这里pod和controller通过label标签来建立关系。如下所示: 3.Deployment控制器应用场景 -1:…

MVCC简介、工作流程、优缺点

目录 简介 相关概念 工作流程 MVCC优缺点 简介 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;即多版本并发控制&#xff0c;是通过维护数据的历史版本&#xff0c;从而解决并发访问情况下的读一致性问题 相关概念 读锁&#xff1a; 也叫共享锁、S锁。若…

ubuntu 22.04 -- cmake安装

安装方式一&#xff1a;源码安装 1、下载安装包 官网下载&#xff1a;下载链接&#xff1a;https://cmake.org/download/ 也可以使用命令行下载 wget https://github.com/Kitware/CMake/releases/download/v3.26.5/cmake-3.26.5.tar.gz2、解压并安装 # 1、解压 tar -zxvf …

数据结构入门 — 队列

本文属于数据结构专栏文章&#xff0c;适合数据结构入门者学习&#xff0c;涵盖数据结构基础的知识和内容体系&#xff0c;文章在介绍数据结构时会配合上动图演示&#xff0c;方便初学者在学习数据结构时理解和学习&#xff0c;了解数据结构系列专栏点击下方链接。 博客主页&am…

Private market:借助ZK实现的任意计算的trustless交易

1. 引言 Private market&#xff0c;借助zk-SNARKs和以太坊来 隐私且trustlessly selling&#xff1a; 1&#xff09;以太坊地址的私钥&#xff08;ECDSA keypair&#xff09;2&#xff09;EdDSA签名3&#xff09;Groth16 proof&#xff1a;借助递归性来匿名交易Groth16 proo…

Pytest参数详解 — 基于命令行模式

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff0…

Dubbo详解

1.1 Dubbo概述 Dubbo是阿里巴巴开源的基于 Java 的高性能RPC&#xff08;一种远程调用&#xff09; 分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。 每天为2千多个服务提供大于30亿次访问量支持&#xff0c;并被…

HDFS文件的读写流程

Hadoop HDFS的读写文件流程 HDFS写文件流程 客户端通过Distributed FileSystem模块向NameNode请求上传文件&#xff08;hadoop fs -put 文件名 文件路径 &#xff09; 判断该客户端是否有写入权限NameNode检查目标文件是否已存在&#xff0c;父目录是否存在。 NameNode返回是…

2、Spring6 入门

1、环境要求 JDK&#xff1a;Java17&#xff08;Spring6要求JDK最低版本是Java17&#xff09; Maven&#xff1a;3.6 Spring&#xff1a;6.0.2 2、构建模块 2.1 构建父模块spring6 点击“Create” 2.2 构建子模块spring-first 点击 Create 完成. 3、程序开发 3.1 引入依…

python面试题合集(一)

python技术面试题 1、Python中的幂运算 在python中幂运算是由两个 **星号运算的&#xff0c;实例如下&#xff1a; >>> a 2 ** 2 >>> a 4我们可以看到2的平方输出结果为4。 那么 ^指的是什么呢&#xff1f;我们用代码进行演示&#xff1a; >>>…

全新纠错码将量子计算提效10倍!

上周&#xff0c;来自两个研究小组的最新模拟报告称&#xff0c;一类新兴的量子纠错码的效率比目前的“黄金标准”&#xff08;即表面码&#xff09;高出一个数量级。 量子纠错码的工作原理都是将大量容易出错的量子比特转换成更小的“受保护”量子比特&#xff0c;这些量子比特…

vue3+ts+tinynce富文本编辑器+htmlDocx+file-saver 配合实现word下载

vue3 请下载html-docx-js-typescript&#xff0c;否则会报错类型问题 //报告导出word import * as htmlDocx from "html-docx-js-typescript";//ts-ignore import { saveAs } from file-saver// 下载文件&#xff0c; const downloadFile (row)> {try {const co…