从传入的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;
        }
复制代码

 

posted @   混子一  阅读(504)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示