从传入的EXCEL表中读取数据,时间字段不规范导致读取出错的问题
在先前的c#从前端接收excel表将其数据导入到数据库中这篇文章中接收规范的string格式的字段是没有问题的
但是遇到不规范的,如使用文本格式储存数字,及不规范储存时间的情况下,就会出现报错
首先对单元格进行类型判断
public enum CellType { Unknown = -1, Numeric = 0, String = 1, Formula = 2, Blank = 3, Boolean = 4, Error = 5 }
如要将一个单元格储存为DateTime格式,解药先判断单元格是否为时间格式,不是的话,先储存为string类型,判断不为空后再进行转换
又出问题,虽然为时间格式但是转换时会变成1901年;
// 传入的cell 为单元格的位置如: row.GetCell(0)
private DateTime? SelectDate(ICell cell) { if (cell.CellType == 0) { var date = cell.ToString(); if (!string.IsNullOrEmpty(date)) { if (date.Contains("月")) return cell.DateCellValue; return DateTime.Parse(date); } } else { var date = cell.ToString(); if (!string.IsNullOrEmpty(date)) return DateTime.Parse(date); } return null; }
感觉应该能合在一起,建议试试,如果能统一上传的单元格格式就可以删除无效代码
尝试约束单元格格式,但是根本没用,技术有限,你永远不知道用户要传给你什么
2022-04-18 进行最终版敲定
目前发现传入的时间类型格式一共有三种
如: 2022.09 2022.09.01 2022/09/01
其中 2022.09需要转化为string类型再转化为DateTime类型才能符合要求,//如果直接转化会变成1901年后的/2022.09天/此时日期的时分秒必不全为0//
而其余两种可以直接进行转换,先转化为string类型反而会报错
根据上述情况可以,推出最新代码
private DateTime? SelectDate(ICell cell) { var date = cell.ToString(); if (!string.IsNullOrEmpty(date)) { if (cell.CellType == 0) { var time = cell.DateCellValue; if (time.Hour == 0 && time.Minute == 0 && time.Second == 0) return time; } return DateTime.Parse(date); } return null; }