从传入的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 @ 2022-04-14 14:02  混子一  阅读(584)  评论(0)    收藏  举报