我也遇到 自己实在没辙 自己 用反射 把数据 映射过去

`

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值读取无效...相关推荐

  1. 内存位置访问无效_万字长文——java内存模型之volatile深入解读

    在阅读本文前,请思考以下的面试题? volatile是什么? volatile的特性 volatile是如何保证可见性的? volatile是如何保证有序性的? volatile可以保证原子性吗? 使 ...

  2. python 读plt文件_用python读Excel文件

    在IC设计.验证.后端中经常会用Excel来做配置文件.寄存器表.定义后端SDC参数等,不管Excel好不好用,但学习成本低啊. Excel文件的结构 Excel文件主要由工作簿(book).工作表( ...

  3. .bin 文件用excel文件打开_用python读Excel文件

    在IC设计.验证.后端中经常会用Excel来做配置文件.寄存器表.定义后端SDC参数等,不管Excel好不好用,但学习成本低啊. Excel文件的结构 Excel文件主要由工作簿(book).工作表( ...

  4. @bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...

    点击上方"匠心零度",选择"设为星标" 做积极的人,而不是积极废人 来源:my.oschina.net/floor/blog/4325651 前言 1.@Com ...

  5. evaluate函数使用无效_我用这个Excel函数,秀了同事一脸!很多人却连它名字都没听过...

    最近收到在某快递上班的周同学问题求助,主要是在计算包裹的体积时遇到了些麻烦事. 下表是周同学近期整理的快递包裹尺寸数据,其中重要一项工作就是通过长*宽*高来计算出包裹的体积. 周同学表示其实自己也能做 ...

  6. 苹果显示付款方式无效_最全实用收藏贴,如何设置苹果手机支付?令人头疼的问题终于解决...

    自今日头条向优质作者开放"圈子"功能之后,随着一线优质师资资源的驻入,今日头条号的"圈子"功能,越来越引起很多网友的关注和兴趣,然而有网友反映,不知道如何才能加 ...

  7. pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...

    点击上方"AI派",关注公众号,选择加"星标"或"置顶" 导读 只需要添加几行代码,就可以得到更快速,更省显存的PyTorch模型. 你知道 ...

  8. python读excel字体颜色_python 设置 excel 单元格颜色填充和字体效果

    原博文 2020-02-29 23:33 − 0.import import openpyxl from openpyxl.styles import colors, fills, Font, Pat ...

  9. 小写数字转大写_不得不说的Excel小技巧:设置单元格格式将小写金额转换成大写...

    大家好,我是小秋,近期一段时间比较忙,没有在今日头条上更新原创文章了.希望朋友们多多见谅,下面与大家分享一个Excel实用小技巧:如何设置单元格格式将小写金额转换成大写? 1.应用场景 在报销单.收据 ...

最新文章

  1. sqlalchemy.exc.InternalError: (pymysql.err.InternalError) Packet sequence number wrong - got 40 expe
  2. 新一轮光伏电站产能过剩隐忧初显
  3. cleanmymac3.9.6 for mac_色轮插件配色神器Coolorus 2.6(win+mac)
  4. iOS进阶之底层原理-block本质、block的签名、__block、如何避免循环引用
  5. JSP标签:jsp内置标签、jstl标签、自定义标签
  6. TCP/IP的层次结构以及各层数据封装的过程 (一)
  7. sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户
  8. Android 跨进程通信大总结
  9. VMware 即使克隆解析
  10. 三相滤波器怎么接线_数字滤波器设计的一般套路
  11. python中easygui和tkinter_python easygui Tkinter
  12. struts2 select标签
  13. 何为领导力 —— 《Working Backwards》书评
  14. Windows 7安装 Visual Studio 2010之大战三大回合
  15. 新版贵金属喊单直播间 财经直播间系统 视频直播室在线喊单 源码
  16. 游戏音效素材大全下载 - 3000首高清无损-按分类整理
  17. Unti12. linux中的软件的管理
  18. VisionPro软件介绍
  19. 命令行实现URL编解码
  20. 5G网络架构与组网部署

热门文章

  1. 微信开放平台实现扫码登录(java)
  2. 掌控板结合Arduino实现数据上传阿里云
  3. 遗传算法(四)MATLAB GA工具箱使用 附解TSP问题
  4. 怎么在线图片识别文字?这里有你需要的方法
  5. MSCRM4 让视图查找功能默认实现模糊查找
  6. 什么是JavaEE,什么是Spring
  7. TBB、OpenMP对比
  8. 10-Mar-2021 17:31日期怎么转换
  9. 在VMWare虚机上安装集客网关X86软件
  10. OCP-1Z0-053-V12.02-676题