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.rhkb.cn/news/113347.html

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

相关文章

【Bug】Ubuntu 有线设置打不开无反应

前言&#xff1a; 突然有线设置就没法启用了&#xff0c;但是能联网&#xff0c;能查看ip 解决&#xff1a; 最后安装了一个新的依赖包&#xff1a; sudo apt install gnome-control-center 然后就可以了 还有一个方法&#xff0c;没试过&#xff0c;但感觉有点道理的&#…

如何利用 SmartX 存储性能测试工具 OWL 优化性能管理?

作者&#xff1a;深耕行业的 SmartX 金融团队 张瑞松 运维人员在日常管理集群时&#xff0c;有时难免会产生这样的困惑&#xff1a; 新业务准备上线&#xff0c;在具备多套存储的情况下&#xff0c;应如何选择承载业务的存储环境&#xff1f; 业务虚拟机刚上线时运行速度很快…

Databricks 入门之sql(二)常用函数

1.类型转换函数 使用CAST函数转换数据类型&#xff08;可以起别名&#xff09; SELECTrating,CAST(timeRecorded as timestamp) FROMmovieRatings; 支持的数据类型有&#xff1a; BIGINT、BINARY、BOOLEAN、DATE 、DECIMAL(p,s)、 DOUBLE、 FLOAT、 INT、 INTERVAL interva…

transformer实现词性标注

1、self-attention 1.1、self-attention结构图 上图是 Self-Attention 的结构&#xff0c;在计算的时候需要用到矩阵 Q(查询), K(键值), V(值)。在实际中&#xff0c;Self-Attention 接收的是输入(单词的表示向量 x组成的矩阵 X) 或者上一个 Encoder block 的输出。而 Q, K, V…

新手将最简单的springboot部署上tomcat出现的意外问题

现阶段springboot部署到tomcat的文章一抓一大把且都相同,便贴一个地址以展示流程: SpringBoot打war包部署Tomcat(最全)_spring boot war 部署tomcat_聊Java的博客-CSDN博客 那么就说一下我出现的问题: 在完整复现流程且确认代码无误的情况下,部署到tomcat,此时问题出现了:启动…

(线特征)opencv+opencv contribute 配置

写一篇博客&#xff0c;记录开始线特征slam的历程。 在配置环境的时候&#xff0c;可以发现大多数都是用到了opencv3.4.16和其contribute版本&#xff0c;这里进行一个相关操作的教学。配置环境是在Ubuntu下面进行的&#xff0c;建议使用Ubuntu18来进行线特征的配置以及代码的…

【Axure高保真原型】中继器网格图片拖动摆放

今天和大家分享中继器网格图片拖动摆放的原型模板&#xff0c;我们可以通过鼠标拖动来移动图片&#xff0c;拖动过程其他图标会根据图片拖动自动排列&#xff0c;松开鼠标是图片停放在指定位置&#xff0c;其他图标自动排列。那这个模板是用中继器制作的&#xff0c;所以使用也…

培训机构到底靠不靠谱?

前言 英雄算法联盟八月集训 已经接近尾声&#xff0c;九月算法集训将于 09月01日&#xff08;明天&#xff09; 正式开始&#xff0c;目前已经提前开启报名&#xff0c;截至目前总人数为 2093 人&#xff0c;距离报名结束还有最后一天&#xff0c;报名方式见 这里&#xff0c;想…

经典文献阅读之--SLAMesh(网格化激光SLAM)

0. 简介 最近激光SLAM的新工作真的是越来越多了&#xff0c;而大多数当前的激光SLAM系统都是在点云中构建地图&#xff0c;即使在人眼看来是稠密的&#xff0c;但当放大时&#xff0c;点云是稀疏的。稠密地图对于机器人应用至关重要&#xff0c;例如基于地图的导航。由于内存成…

SQL语言-01

SQL Structured Query Language 的简单介绍 SQL 中的书写规则 SQL 中的数据类型

基于SpringBoot+Vue的旅游系统

摘 要 随着旅游业的发展&#xff0c;越来越多的人选择旅游作为自己的出行方式。在旅游规划过程中&#xff0c;旅游景点选择是至关重要的环节。本文提出了一种基于协同过滤推荐算法的旅游平台系统。该系统采用前后端分离的设计&#xff0c;主要使用了SpringBoot、Vue等技术&…

经纬恒润荣获吉利汽车“最佳价值贡献”奖

8月18日&#xff0c;以“全面向新 共创共赢”为主题&#xff0c;吉利汽车在宁波成功举行2023年电子电器核心供应商恳谈会。经纬恒润凭借在项目合作上持续创新、高效协同等优异表现&#xff0c;获得“最佳价值贡献”奖项。 作为国产汽车代表性品牌之一&#xff0c;吉利汽车积极推…

使用errors.Wrapf()代替log.Error()

介绍不同语言的错误处理机制: Error handling patterns[1] Musings about error handling mechanisms in programming languages[2] 项目中 main调func1&#xff0c;func1调取func2... 这样就会出现很多的 if err ! nil { log.Printf()} , 在Kibana上查看时会搜到多条日志, 需要…

汽车制造行业,配电柜如何实施监控?

工业领域的生产过程依赖于高效、稳定的电力供应&#xff0c;而配电柜作为电力分配和控制的关键组件&#xff0c;其监控显得尤为重要。 配电柜监控通过实时监测、数据收集和远程控制&#xff0c;为工业企业提供了一种有效管理电能的手段&#xff0c;从而确保生产的连续性、安全性…

Web 开发 Django 模板

上次为大家介绍了 Django 的模型和自带的管理工具&#xff0c;有了这个工具就可以全自动地根据模型创建后台管理界面&#xff0c;以供网站管理者更方便的管理网站数据。有了网站数据&#xff0c;那怎么样更方便又好看的展示给用户看呢&#xff1f;目前流行的 Web 框架基本都采用…

ChatGPT AIGC 一个指令总结Python所有知识点

在ChatGPT中,直接输入一个指令就可以生成Python的所有知识点大纲。 非常实用的ChatGPT功能。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.…

小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(一)

Java语言是最为流行的面向对象编程语言之一&#xff0c; Java运行时环境&#xff08;JRE&#xff09;拥有着非常大的用户群&#xff0c;其安全问题十分重要。近年来&#xff0c;由JRE漏洞引发的JVM逃逸攻击事件不断增多&#xff0c;对个人计算机安全造成了极大的威胁。研究JRE安…

【C++】线程安全问题

原子类型非线程安全 #include <iostream> #include <thread>int main() {int num 0;int count 100000;std::thread thread1([&](){for(int i 0; i < count; i){num;}});std::thread thread2([&](){for(int i 0; i < count; i){num;}});std::thr…

双亲委派机制

双亲委派机制流程 当Application ClassLoader 收到一个类加载请求时&#xff0c;他首先不会自己去尝试加载这个类&#xff0c;而是将这个请求委派给父类加载器Extension ClassLoader去完成。 当Extension ClassLoader收到一个类加载请求时&#xff0c;他首先也不会自己去尝试…

目标检测笔记(十一):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)

文章目录 背景代码结果 背景 由于我们在做项目的时候可能会涉及到某个指定区域进行目标检测或者人脸识别等任务&#xff0c;所以这篇博客是为了探究如何在传统目标检测的基础上来结合特定区域进行检测&#xff0c;以OpenCV自带的包为例。 一般来说有两种方式实现区域指定&…