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,一经查实,立即删除!

相关文章

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

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

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

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

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:…

数据结构入门 — 队列

本文属于数据结构专栏文章&#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;并被…

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…

Power View

界面 切换可视化效果 对于已经上传到透视表的数据&#xff0c;选择power view&#xff0c;形成表格后。

基础知识回顾:借助 SSL/TLS 和 NGINX 进行 Web 流量加密

原文作者&#xff1a; Robert Haynes 原文链接&#xff1a; 基础知识回顾&#xff1a;借助 SSL/TLS 和 NGINX 进行 Web 流量加密 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 网络攻击者肆无忌惮、作恶多端&#xff0c;几乎每天都有网络入侵、数据窃取或勒索软件攻击…

【广州华锐互动】VR党建多媒体互动展厅:随时随地开展党史教育

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐渗透到各个领域&#xff0c;其中党建教育尤为受益。为了更好地传承红色基因&#xff0c;弘扬党的优良传统&#xff0c;广州华锐互动推出了VR党建多媒体互动展厅&#xff0c;让广大党员干部和人民群众通过现代科技手段&a…

数据分析基础-数据可视化学习笔记03-可视化的符号与表示-图形符号学

概念 图型符号学&#xff08;Cartographic Symbolization&#xff09;是地图学领域中的一个重要概念&#xff0c;涉及到如何使用不同的符号、颜色、图案和标记来在地图上表示地理信息和数据。图型符号学旨在传达地理信息&#xff0c;使得地图能够清晰、有效地传达各种空间数据…

山西电力市场日前价格预测【2023-09-02】

日前价格预测 预测明日&#xff08;2023-09-02&#xff09;山西电力市场全天平均日前电价为304.03元/MWh。其中&#xff0c;最高日前电价为373.15元/MWh&#xff0c;预计出现在19: 15。最低日前电价为191.94元/MWh&#xff0c;预计出现在12: 30。 价差方向预测 1&#xff1a; 实…

c++ opencv将彩色图像按连通域区分

要将彩色图像按连通域区分&#xff0c;您可以使用 OpenCV 中的 cv::connectedComponents 函数。 下面是一个简单的示例代码&#xff0c;说明如何使用 cv::connectedComponents 函数来检测并标记图像中的连通域&#xff1a; #include <opencv2/opencv.hpp> #include <…

深度学习6:自然语言处理-Natural language processing | NLP

目录 NLP 为什么重要&#xff1f; 什么是自然语言处理 – NLP NLP 的2大核心任务 自然语言理解 – NLU|NLI 自然语言生成 – NLG NLP(自然语言处理) 的5个难点 NLP 的4个典型应用 NLP 的 2 种途径、3 个核心步骤 总结 自然语言处理 NLP 为什么重要&#xff1f; “语言…

人员位置管理,点亮矿山安全之路

矿山作为一个高危行业&#xff0c;安全问题一直备受关注。人员定位置管理是现代矿山安全管理的重要一环&#xff0c;可以帮助企业更好地实现对人员的实时监控和管理。因此&#xff0c;矿山人员位置管理系统对于矿山安全生产和管理非常重要&#xff0c;可以帮助减少安全事故的发…