当前位置: 首页 > news >正文

EasyExcel导入导出数据类型转换

前言:

1、基本数据类型转换:当前原始的数据类型是interger类型,需要在导出时将其映射为对应的字符串,并且导入时可以将字符串重新映射为interger类型。

2、时间格式转换:数据从数据库中获取的类型为LocalDate类型,即yyyy-mm-dd,导出时需要将其格式化为yyyy-mm类型,导入时可以将yyyy-mm串重新映射为yyyy-mm-dd。

1、基本数据类型转换

实体类

    /** 产品类型  0-电芯 1-pack */@ExcelProperty(value = "产品类型",index = 2, converter = ProductTypeConverter.class)@ColumnWidth(15)private Integer productType;

配置数据类型转换器

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;public class ProductTypeConverter implements Converter<Integer> {@Overridepublic WriteCellData<Integer> convertToExcelData(Integer i, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {if (i == 0) {return new WriteCellData<>("电芯");} else if (i == 1) {return new WriteCellData<>("PACK");}return new WriteCellData<>(" ");}@Overridepublic Integer convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {if("电芯".equals(cellData.getStringValue())){return 0;} else if("PACK".equals(cellData.getStringValue())){return 1;}else {return -1;}}}

2、时间格式转换

实体类

    /** 统计时间 */@ExcelProperty(value = "统计时间",index = 7,converter = DateConverter.class)@JsonFormat(pattern = "yyyy-MM-dd")@DateTimeFormat(pattern = "yyyy-MM-dd")@ColumnWidth(20)private LocalDate statisticsTime;

配置的时间格式转换器

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.WriteConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import org.apache.poi.ss.usermodel.DateUtil;import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Date;public class DateConverter implements Converter<LocalDate> {private static final String PATTERN_YYYY_MM = "yyyy-MM";@Overridepublic Class<LocalDate> supportJavaTypeKey() {return LocalDate.class;}@Overridepublic WriteCellData<String> convertToExcelData(WriteConverterContext<LocalDate> context)  {LocalDate localDate = context.getValue();if (localDate == null) {return null;}Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM);return new WriteCellData<>(sdf.format(date));}@Overridepublic LocalDate convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {if(null==cellData) {return null;}LocalDate result=null;if(cellData.getType()== CellDataTypeEnum.NUMBER) {if (contentProperty == null || contentProperty.getDateTimeFormatProperty() == null) {Date date= DateUtil.getJavaDate(cellData.getNumberValue().doubleValue(),globalConfiguration.getUse1904windowing(), null);result =date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();} else {Date date=  DateUtil.getJavaDate(cellData.getNumberValue().doubleValue(),contentProperty.getDateTimeFormatProperty().getUse1904windowing(), null);result =date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();}}if(cellData.getType()==CellDataTypeEnum.STRING) {String value=cellData.getStringValue();if(value.contains("-")) {DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd").parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
//                        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
//                        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
//                        .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0).toFormatter();result = LocalDate.parse(value+"-01", formatter);}else if(value.contains("/")) {DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy/MM/dd").parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
//                        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
//                        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
//                        .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0).toFormatter();result = LocalDate.parse(value+"-01", formatter);}}return result;}}

相关文章:

EasyExcel导入导出数据类型转换

前言&#xff1a; 1、基本数据类型转换&#xff1a;当前原始的数据类型是interger类型&#xff0c;需要在导出时将其映射为对应的字符串&#xff0c;并且导入时可以将字符串重新映射为interger类型。 2、时间格式转换&#xff1a;数据从数据库中获取的类型为LocalDate类型&…...

stm32入门-----EXTI外部中断(下——实践篇)

目录 前言 一、硬件介绍 1.对射红外线传感器 2.旋转编码器 二、EXTI外部中断C编程 1.开启RCC时钟 2.配置GPIOK口初始化 3.配置AFIO 4.配置EXIT 5.配置NVIC 三、EXIT外部中断项目实操 1.对射红外传感器计数 2.选择编码器计数 前言 本期接着上一期的内容继续学习stm3…...

深度学习落地实战:基于UNet实现血管瘤超声图像分割

前言 大家好,我是机长 本专栏将持续收集整理市场上深度学习的相关项目,旨在为准备从事深度学习工作或相关科研活动的伙伴,储备、提升更多的实际开发经验,每个项目实例都可作为实际开发项目写入简历,且都附带完整的代码与数据集。可通过百度云盘进行获取,实现开箱即用 …...

Python进阶(4)--正则表达式

正则表达式 在Python中&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是一种强大的文本处理工具&#xff0c;它允许你使用一种特殊的语法来匹配、查找、替换字符串中的文本。 在这之前&#xff0c;还记得之前我们是通过什么方法分割…...

RCA连接器是什么?一文读懂

RCA连接器&#xff0c;也就是我们在电视机、DVD播放器、通讯设备、立体声设备和游戏设备后面常见的彩色插头&#xff0c;其历史可以追溯到近一个世纪以前。这种现今广泛使用的电缆接口&#xff0c;最初是由美国无线电公司&#xff08;RCA&#xff09;开发并命名的&#xff0c;在…...

【linux】服务器安装NVIDIA驱动

【linux】服务器安装NVIDIA驱动 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 文章目录 【linux】服务器安装NVIDIA驱动一、关闭系统自带驱动nouveau二、下载英伟达驱动三、安装英伟达驱动1、禁用X服务器和相关进程2、在TTY终端安装驱动3、验证是否安装成功4、重新启…...

【达梦数据库】关于用户、模式、表空间等如何理解?

与MySQL的用户有所区别&#xff0c;MySQL是单实例多库&#xff0c;DM7以上版本是单库多实例架构&#xff0c; MySQL访问方式&#xff1a; 一个root访问多个库&#xff0c;访问前切换一下就ok 比如MySQL到DM的迁移是&#xff0c;MySQL的一个库对应dm中的一个表空间和一个用户。比…...

一篇就够mysql高阶知识总结

一、事务的ACID原则 序号原则说明1原子性&#xff08;Atomicity&#xff09;事务是数据库的逻辑工作单位&#xff0c;事务中包括的诸操作要么都做&#xff0c;要么都不做2一致性&#xff08;Consistency&#xff09;事务执行的结果必须是使数据库从一个一致性状态变到另一个一…...

CTF-Web习题:[BJDCTF2020]ZJCTF,不过如此

题目链接&#xff1a;[BJDCTF2020]ZJCTF&#xff0c;不过如此 解题思路 访问靶场链接&#xff0c;出现的是一段php源码&#xff0c;接下来做一下代码审阅&#xff0c;发现这是一道涉及文件包含的题 主要PHP代码语义&#xff1a; file_get_contents($text,r); 把$text变量所…...

【IEEE出版】第四届能源工程与电力系统国际学术会议(EEPS 2024)

第四届能源工程与电力系统国际学术会议&#xff08;EEPS 2024&#xff09; 2024 4th International Conference on Energy Engineering and Power Systems 重要信息 大会官网&#xff1a;www.iceeps.com 大会时间&#xff1a;2024年8月9-11日 大会…...

浅谈Vue:text-align: center、align-items: center、justify-content: center三种居中的区别和用法

text-align: center、align-items: center 和 justify-content: center 是用于不同布局场景下的CSS属性。它们在水平和垂直居中元素方面有所不同&#xff0c;具体取决于你使用的布局模型&#xff08;如块级元素、Flexbox、Grid&#xff09;。以下是它们的区别和适用场景&#x…...

理解UI设计:UI设计师的未来发展机遇

UI设计师的出现是互联网时代的设计变革。随着移动互联网的快速发展&#xff0c;移动产品设计师非常短缺。高薪资让许多其他行业的设计师已经转向了UI设计。那么什么是UI设计呢&#xff1f;UI设计师负责什么&#xff1f;UI设计的发展趋势和就业前景如何&#xff1f;这些都是许多…...

关键字 internal

在C#中&#xff0c;internal 关键字是一个访问修饰符&#xff0c;它用于限制类型或类型成员的访问性。当一个类型&#xff08;类、结构体、接口、枚举等&#xff09;或类型成员&#xff08;字段、属性、方法、事件等&#xff09;被声明为 internal 时&#xff0c;它只能在同一程…...

C学习(数据结构)-->单链表习题

目录 一、环形链表 题一&#xff1a;环形链表 思路&#xff1a; 思考一&#xff1a;为什么&#xff1f; 思考二&#xff1a;快指针一次走3步、4步、......n步&#xff0c;能否相遇 step1&#xff1a; step2&#xff1a; 代码&#xff1a; 题二&#xff1a; 环形链表 I…...

MATLAB6:M文件和控制流

文章目录 一、实验目的二、实验内容三、仿真结果四、实践中遇到的问题及解决方法 一、实验目的 1. 熟悉运用MATLAB的控制指令。   2. 理解M脚本文件和函数文件的本质区别。   3. 能够运用所学知识&#xff0c;编制程序解决一般的计算问题。 二、实验内容 1.for循环结构及注…...

网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术

网页数据抓取&#xff1a;融合BeautifulSoup和Scrapy的高级爬虫技术 在当今的大数据时代&#xff0c;网络爬虫技术已经成为获取信息的重要手段之一。Python凭借其强大的库支持&#xff0c;成为了进行网页数据抓取的首选语言。在众多的爬虫库中&#xff0c;BeautifulSoup和Scrap…...

Linux应用——网络基础

一、网络结构模型 1.1C/S结构 C/S结构——服务器与客户机&#xff1b; CS结构通常采用两层结构&#xff0c;服务器负责数据的管理&#xff0c;客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器&#xff0c;服务器则是提供信息供人访问的计算机。 例如&…...

白骑士的C++教学实战项目篇 4.3 多线程网络服务器

系列目录 上一篇&#xff1a;白骑士的C教学实战项目篇 4.2 学生成绩管理系统 在这一节中&#xff0c;我们将实现一个多线程网络服务器项目&#xff0c;通过该项目&#xff0c;我们将学习套接字编程的基础知识以及如何使用多线程处理并发连接。此外&#xff0c;我们还将实现一个…...

Go语言并发编程-Context上下文

Context上下文 Context概述 Go 1.7 标准库引入 context&#xff0c;译作“上下文”&#xff0c;准确说它是 goroutine 的上下文&#xff0c;包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息&#xff0c;包括&#xff1a;取…...

React@16.x(62)Redux@4.x(11)- 中间件2 - redux-thunk

目录 1&#xff0c;介绍举例 2&#xff0c;原理和实现实现 3&#xff0c;注意点 1&#xff0c;介绍 一般情况下&#xff0c;action 是一个平面对象&#xff0c;并会通过纯函数来创建。 export const createAddUserAction (user) > ({type: ADD_USER,payload: user, });这…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...