Npoi.Mapper 日期转换
2024-10-21 11:28:25
问题: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;
}
最新文章
- spring aop的使用
- atitit.数据验证--db数据库数据验证约束
- 一步步教你Hadoop多节点集群安装配置
- file not found while xcode archive
- java开发eclipse常见问题(一)The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java Build Path
- git rev-list
- hdu 5646 DZY Loves Partition 二分+数学分析+递推
- ecstore实现图片分离(静态资源分离)配置文件
- ASP.NET中怎样才能使自己的代码运行的效率更高
- AngularJS之WebAPi上传
- DPDK support for vhost-user
- System.Data.DbType和数据库映射关系
- HDU 5652 India and China Origins
- 【SpringMVC】【EasyUI】关于使用EasyUIForm上传文件,返回JsonIE提示下载文件的解决办法!
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Win 10更新版1709有哪些新功能值得关注!
- 设置Nginx以列表方式显示网站内容
- 为什么IT运维工程师要学习Linux系统
- day25类的组合多态封装
- 20175310 《Java程序设计》第1周学习总结(2)
热门文章
- loj2839
- 文字icon
- linux升级系统内核
- Java面向对象之回顾方法及加深
- SpringBoot运行就停止
- Oracle 详细-创建用户并导入sql文件
- Linux 下查看mysql 加载的配置文件, 并且解决报错 “this is incompatible with sql_mode=only_full_group_by”
- 硬件IIC主从机中断代码注释解析
- ubuntu18.04 安装 opencv(版本4.5.5) cmake(版本3.25)
- 对PTA题目集1~3的总结