easyexcel注解样式无效_使用Model读Excel模型时,只设置注解ExcelProperty的value值读取无效...
我也遇到 自己实在没辙 自己 用反射 把数据 映射过去
`
package com.thermofisher.dsc.amanda.common.excel.listener;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.thermofisher.dsc.amanda.common.crud.Util;
import com.thermofisher.dsc.amanda.common.excel.model.ITSCARCache;
import com.thermofisher.dsc.amanda.common.excel.model.Validate;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@author wenjie.yang on 4/3/2019.
*/
@slf4j
public class ExcelListener extends AnalysisEventListener {
private final LinkedHashMap TITLE_FILED = new LinkedHashMap<>();
private final HashMap TITLE = new HashMap<>();
/**
true=>use index
false=>use value
*/
private Boolean isIndex;
private Class listenerClazz;
private List datas = new ArrayList<>();
private List indexes = new ArrayList<>();
public ExcelListener(Class listenerClazz,boolean isIndex) {
if (!isIndex){
Field[] fields = listenerClazz.getDeclaredFields();
for (Field field:fields){
ExcelProperty excelProperty = field.getDeclaredAnnotationsByType(ExcelProperty.class)[0];
TITLE.put(excelProperty.value()[0],field.getName());
}
}
this.isIndex = isIndex;
this.listenerClazz = listenerClazz;
}
@override
public void invoke(Object object, AnalysisContext context) {
Integer rowNum = context.getCurrentRowNum();
if (!isIndex){
List list = (List) object;
if (TITLE_FILED.isEmpty()){
initMapKeys(list);
}
//rowNum > 0 can init data to map
if (rowNum>0){
Map mapData = createMapData(list);
if(listenerClazz == ITSCARCache.class){
if (StringUtils.isEmpty(mapData.get("bill2NO"))){
log.info("the {} num data is wrong, this object is {}", rowNum,object.toString());
return;
}
}
datas.add(mapData);
}
}else{
if(((Validate)object).validate()){
datas.add(object);
}else {
log.info("the {} num data is wrong, this object is {}", rowNum,object.toString());
}
}
}
private void initMapKeys(List list) {
for (int i = 0; i
TITLE_FILED.put(TITLE.get(list.get(i)),null);
if (TITLE.keySet().contains(list.get(i))){
indexes.add(i);
}
}
TITLE_FILED.remove(null);
}
private Map createMapData(List object) {
List list = object;
LinkedHashMap linkedHashMap = this.copyMap();
int i = 0;
for (String key:linkedHashMap.keySet()){
String vaule;
try{
vaule = list.get(indexes.get(i));
}catch (Exception e){
vaule= null;
}
if (isIntTitle(key) && StringUtils.isNotBlank(vaule)){
try {
vaule = Integer.valueOf(vaule).toString();
}catch (NumberFormatException e){
vaule = null;
}
}
if (key.indexOf("Date")!=-1){
if (vaule!=null){
linkedHashMap.put(key,dateFormat(vaule));
}
}else{
linkedHashMap.put(key,vaule==null?null:vaule.trim());
}
i++;
}
linkedHashMap.remove(null);
return linkedHashMap;
}
private boolean isIntTitle(String key){
if ("amDisc".equals(key) || "rmDisc".equals(key)|| "sdDisc".equals(key)){
return true;
}
return false;
}
private LinkedHashMap copyMap(){
LinkedHashMap linkedHashMap = new LinkedHashMap<>();
TITLE_FILED.forEach((k,v)->linkedHashMap.put(k,null));
return linkedHashMap;
}
private String dateFormat(String hssDate){
if (hssDate==null) return null;
Double va ;
try{
va = Double.valueOf(hssDate);
}catch (NumberFormatException e){
return null;
}
Date date = HSSFDateUtil.getJavaDate(va, false);
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
String date2Str = sdf.format(date);
return date2Str;
}
@override
public void doAfterAllAnalysed(AnalysisContext context) {
// datas.clear();//解析结束销毁不用的资源
}
private Class getThisClass(){
return Util.getActualArgumentType(this.getClass(), 0);
}
public void clear() {
datas.clear();
}
public List getDatas() {
return datas;
}
public void setDatas(List datas) {
this.datas = datas;
}
}
`
easyexcel注解样式无效_使用Model读Excel模型时,只设置注解ExcelProperty的value值读取无效...相关推荐
- 内存位置访问无效_万字长文——java内存模型之volatile深入解读
在阅读本文前,请思考以下的面试题? volatile是什么? volatile的特性 volatile是如何保证可见性的? volatile是如何保证有序性的? volatile可以保证原子性吗? 使 ...
- python 读plt文件_用python读Excel文件
在IC设计.验证.后端中经常会用Excel来做配置文件.寄存器表.定义后端SDC参数等,不管Excel好不好用,但学习成本低啊. Excel文件的结构 Excel文件主要由工作簿(book).工作表( ...
- .bin 文件用excel文件打开_用python读Excel文件
在IC设计.验证.后端中经常会用Excel来做配置文件.寄存器表.定义后端SDC参数等,不管Excel好不好用,但学习成本低啊. Excel文件的结构 Excel文件主要由工作簿(book).工作表( ...
- @bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...
点击上方"匠心零度",选择"设为星标" 做积极的人,而不是积极废人 来源:my.oschina.net/floor/blog/4325651 前言 1.@Com ...
- evaluate函数使用无效_我用这个Excel函数,秀了同事一脸!很多人却连它名字都没听过...
最近收到在某快递上班的周同学问题求助,主要是在计算包裹的体积时遇到了些麻烦事. 下表是周同学近期整理的快递包裹尺寸数据,其中重要一项工作就是通过长*宽*高来计算出包裹的体积. 周同学表示其实自己也能做 ...
- 苹果显示付款方式无效_最全实用收藏贴,如何设置苹果手机支付?令人头疼的问题终于解决...
自今日头条向优质作者开放"圈子"功能之后,随着一线优质师资资源的驻入,今日头条号的"圈子"功能,越来越引起很多网友的关注和兴趣,然而有网友反映,不知道如何才能加 ...
- pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...
点击上方"AI派",关注公众号,选择加"星标"或"置顶" 导读 只需要添加几行代码,就可以得到更快速,更省显存的PyTorch模型. 你知道 ...
- python读excel字体颜色_python 设置 excel 单元格颜色填充和字体效果
原博文 2020-02-29 23:33 − 0.import import openpyxl from openpyxl.styles import colors, fills, Font, Pat ...
- 小写数字转大写_不得不说的Excel小技巧:设置单元格格式将小写金额转换成大写...
大家好,我是小秋,近期一段时间比较忙,没有在今日头条上更新原创文章了.希望朋友们多多见谅,下面与大家分享一个Excel实用小技巧:如何设置单元格格式将小写金额转换成大写? 1.应用场景 在报销单.收据 ...
最新文章
- sqlalchemy.exc.InternalError: (pymysql.err.InternalError) Packet sequence number wrong - got 40 expe
- 新一轮光伏电站产能过剩隐忧初显
- cleanmymac3.9.6 for mac_色轮插件配色神器Coolorus 2.6(win+mac)
- iOS进阶之底层原理-block本质、block的签名、__block、如何避免循环引用
- JSP标签:jsp内置标签、jstl标签、自定义标签
- TCP/IP的层次结构以及各层数据封装的过程 (一)
- sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户
- Android 跨进程通信大总结
- VMware 即使克隆解析
- 三相滤波器怎么接线_数字滤波器设计的一般套路
- python中easygui和tkinter_python easygui Tkinter
- struts2 select标签
- 何为领导力 —— 《Working Backwards》书评
- Windows 7安装 Visual Studio 2010之大战三大回合
- 新版贵金属喊单直播间 财经直播间系统 视频直播室在线喊单 源码
- 游戏音效素材大全下载 - 3000首高清无损-按分类整理
- Unti12. linux中的软件的管理
- VisionPro软件介绍
- 命令行实现URL编解码
- 5G网络架构与组网部署