问题: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;
}

最新文章

  1. spring aop的使用
  2. atitit.数据验证--db数据库数据验证约束
  3. 一步步教你Hadoop多节点集群安装配置
  4. file not found while xcode archive
  5. java开发eclipse常见问题(一)The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path
  6. git rev-list
  7. hdu 5646 DZY Loves Partition 二分+数学分析+递推
  8. ecstore实现图片分离(静态资源分离)配置文件
  9. ASP.NET中怎样才能使自己的代码运行的效率更高
  10. AngularJS之WebAPi上传
  11. DPDK support for vhost-user
  12. System.Data.DbType和数据库映射关系
  13. HDU 5652 India and China Origins
  14. 【SpringMVC】【EasyUI】关于使用EasyUIForm上传文件,返回JsonIE提示下载文件的解决办法!
  15. Java8内存模型—永久代(PermGen)和元空间(Metaspace)
  16. Win 10更新版1709有哪些新功能值得关注!
  17. 设置Nginx以列表方式显示网站内容
  18. 为什么IT运维工程师要学习Linux系统
  19. day25类的组合多态封装
  20. 20175310 《Java程序设计》第1周学习总结(2)

热门文章

  1. loj2839
  2. 文字icon
  3. linux升级系统内核
  4. Java面向对象之回顾方法及加深
  5. SpringBoot运行就停止
  6. Oracle 详细-创建用户并导入sql文件
  7. Linux 下查看mysql 加载的配置文件, 并且解决报错 “this is incompatible with sql_mode=only_full_group_by”
  8. 硬件IIC主从机中断代码注释解析
  9. ubuntu18.04 安装 opencv(版本4.5.5) cmake(版本3.25)
  10. 对PTA题目集1~3的总结