从传入的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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构