Npoi.Mapper 日期转换
问题:Excel文档里有一些列是日期类型的数据,使用Mapper默认的转换,发现生成的实体,在有的系统环境下能正常转换,但是在有的系统环境下,转换的日期出现中文。
猜想是Excel文档里,日期列的单元格格式是日期,那么转换为字符串时,会生成区域性特定格式的字符串。如果单元格格式是文本,那么应该就没有转换的问题了。
没有找到相关的api可以简捷地设置日期的转换规则,知道的可以留言告诉我
在.Net Core Excel导入导出神器Npoi.Mapper 找到了思路,自定义某一列的转换规则。
我大体上是按照这个思路来解决的,多个日期列就用循环来解决,加入泛型来针对不同的Excel文档,总体来说略显累赘
查看代码
/// <summary>
/// 修复日期转换后存在中文的问题
/// 原因分析:Excel列的类型是DateTime,在不同的系统环境下,经过Mapper的转换,会生成区域性特定格式的字符串
/// 解决方案是对格式为DateTime的列指定自定义的转换规则
/// </summary>
/// <typeparam name="T">Excel文档映射的实体</typeparam>
/// <param name="fileStream">Excel文档的流</param>
/// <param name="dateCols">数据为日期的列名</param>
/// <returns></returns>
public List<T> analysisExcelWithDateCols<T>(Stream fileStream, string[] dateCols) where T : class
{
List<T> ModelList = new List<T>();
var mapper = new Mapper(fileStream);
List<RowInfo<T>> DataList = new List<RowInfo<T>>();
foreach (string dateCol in dateCols)
{
PropertyInfo propertyInfo = typeof(T).GetProperty(dateCol);
mapper.Map<T>(dateCol, dateCol, (excelCol, entity) =>
{
if (excelCol.CurrentValue != null)
{
T obj = entity as T;
if (obj != null)
{
DateTime date;
if (excelCol.CurrentValue is string)
{
date = Convert.ToDateTime(excelCol.CurrentValue);
}
else
{
date = (DateTime)excelCol.CurrentValue;
}
propertyInfo?.SetValue(obj, date.ToString("MM/dd/yyyy"));
}
}
return true;
}, null);
}
DataList = mapper.Take<T>().ToList();
if (DataList != null && DataList.Count > 0)
{
foreach (var item in DataList)
{
ModelList.Add(item.Value);
}
}
return ModelList;
}
Npoi.Mapper 日期转换的更多相关文章
- .Net Core Excel导入导出神器Npoi.Mapper
前言 我们在日常开发中对Excel的操作可能会比较频繁,好多功能都会涉及到Excel的操作.在.Net Core中大家可能使用Npoi比较多,这款软件功能也十分强大,而且接近原始编程.但是直接使用Np ...
- springMvc的日期转换之二
方式一:使用@InitBinder注解实现日期转换 前台页面: 后台打印: 方式二:处理多种日期格式类型之间的转换 采用方式:由于binder.registerCustomEditor(Date.cl ...
- Struts2中Date日期转换的问题
今天跑程序的时候莫名其妙的出现了下面的一个异常: java.lang.NoSuchMethodException:com.ca.agent.model.mybatis.ApprovalInforC ...
- Js 日期转换函数(UTC时间转换及日期想加减)
IOS上Js日期转换中new Date("yyyy-mm-dd")不能正常工作,必须使用new Date("yyyy/MM/dd"); 日期相加减: Date. ...
- json日期转换
//调用 ChangeDateFormat(CreatTime) //json日期转换 function ChangeDateFormat(jsondate) { jsondate = jsondat ...
- MySql和Oracle的日期转换到底有哪些不同?我们来比较一下
1.MySql和Oracle的日期转换 mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE. oracle> select to_char(sysdate,'yy ...
- AngularJS 日期转换字符串
日期转换成字符串的办法有很多种,其中最简单的方法是 使用AngularJS的filter来实现. $filter('date')(date, 'yyyyMM'): $filter('date')(da ...
- 使用DateUtils和DateFormatUtils处理时间日期转换与SimpleDateFormat的区别
在Apache Commons项目的Lang里面,有两个类:DateUtils和DateFormatUtils,专门用于处理时间日期转换.它们在 org.apache.commons.lang.tim ...
- excel转换日期格式,将yyyymmdd类型日期转换成yyyy-mm-dd等日期类型方法
源数据日期格式:例如: 20160420 20160422 目标日期格式类型: 2016-4-20 2016-4-22 或 2016/04/20 2016/04/22 方法: 一.选中相应数据的单元格 ...
- 日期转换时Safari中返回Invalid Date
问题: 进行日期转换时,Safari中会返回Invalid Date, 而IE 9, Firefox, Chrome and Opera显示正常,代码如下所示: var d = new Date(&q ...
随机推荐
- ModuleNotFoundError:No module named 'past' 问题及解决方法
训练YOLOX时报错 ModuleNotFoundError:No module named 'past' 解决方法 使用pip安装对应的package:future pip install futu ...
- JetBrains之全家桶破解
JetBrains之全家桶破解(idea,rider....) 链接之....JETBRA.IN 打开上面的链接 随便点击下图中一个可用的链接,进入之后看下一步. 打开上一步的链接之后,下载下图中红框 ...
- N63050 第十一周运维作业
第十一周 就业和全程班小伙伴本周学习内容: 二十一.Mysql数据库二 1.MySQL的视图函数存储过程触发器和事件管理(64分钟) 2.MySQL用户和权限管理(40分钟) 3.MySQL架构和存储 ...
- 在linux 下如何快速创建环境
首先先在你的主目录下创建一个文件 touch venv python创建环境 python3 -m venv venv 创建虚拟环境 (提示:当你有错找不到的时候可以重新创建一个环境) source ...
- 2022-05-31内部群每日三题-清辉PMP
1.由于项目执行期间的范围变更,项目经理确定供应商必须对一个已在使用的产品模块进行更改.项目经理首先做什么? A.准备一份变更请求,以更新供应商的合同条款 B.检查采购管理计划和合同条款 C.将该信息 ...
- @Target:注解的作用目标
@Target:注解的作用目标 @Target(ElementType.TYPE)--接口.类.枚举.注解 @Target(ElementType.FIELD)--字段.枚举的常量 @Target(E ...
- Software_Programming_bootstrap_book
2019-10-25 HTML index 11 p24 主页布局.
- 使用vue3对数据进行分页展示
要获取用户的滚动位置,可以在末尾添加一列空白节点.每当出现空白时意味着滑倒网页最底部,则进行渲染数据.可以使用getBoundingClientRect来判断是否在页面底部. getBoundingC ...
- 088_BatchApex_Callout
global class BatchSync implements Database.Batchable<sObject>, Database.AllowsCallouts { publi ...
- Spring基本概述
Spring是一个开源框架,官方网站是http://spring.io/,Spring是2003年兴起的一个轻量级的Java开发框架,由lnterface21公司的JavaEE专家RodJohnson ...