使用LinqToExcel读取Excel日期始终得到01/01/0001的问题
解决Excel日期读取返回01/01/0001的问题
看起来你在使用强类型映射读取Excel日期时碰到了默认值的坑,这种情况我之前帮不少开发者排查过,主要集中在字段映射不匹配或者Excel数据格式异常这两个方向,给你几个具体的排查和修复步骤:
1. 确认实体类的字段映射是否准确
首先检查你的Réception_camions类,确保Date_d_arrivée字段和Excel列的对应关系完全正确:
- 如果使用的是EPPlus这类库,记得给字段加上列名映射特性,要完全匹配Excel里的列名(包括空格、特殊字符):
public class Réception_camions { [ExcelColumn(Name = "Date d'arrivée")] // 这里要和Excel列名完全一致 public DateTime? Date_d_arrivée { get; set; } // 其他字段... } - 另外,字段类型用
DateTime?(可空类型)比DateTime更合理,避免空值直接被解析成默认的01/01/0001。
2. 排查Excel文件的日期存储格式
打开你的Excel文件,选中Date d'arrivée列,右键查看单元格格式:
- 如果格式是「文本」,Excel不会把它识别为日期类型,强类型映射自然无法解析,需要改成「日期」格式,保存后重新读取。
- 如果已经是日期格式,还是读不对,建议筛选列检查是否存在空值、乱码或者无效日期(比如年份超出范围)的单元格。
3. 手动解析文本格式的日期(如果无法修改Excel)
如果业务上不能修改Excel的格式,那可以先把实体类的Date_d_arrivée改成string类型,然后在代码里手动解析:
foreach (var a in empDetails) { if (!string.IsNullOrEmpty(a.Date_d_arrivée)) { // 用法语区域解析,匹配Excel里的日期格式 if (DateTime.TryParse(a.Date_d_arrivée, CultureInfo.GetCultureInfo("fr-FR"), DateTimeStyles.None, out DateTime date)) { TimeSpan heure = a.heure_d_arrivée; decimal poidsCam = a.Poids_cam; int idQualite = Convert.ToInt32(a.Id_qualité); int result = PostExcelData(date, heure, poidsCam, a.Id_cam, idQualite); // ...后续逻辑 } else { // 解析失败时记录日志或跳过,避免影响其他数据 Console.WriteLine($"无效日期:{a.Date_d_arrivée},跳过这条数据"); } } }
4. 检查Excel库的配置和版本
如果你用的是EPPlus,确保版本支持强类型映射,并且没有禁用日期解析的配置。初始化时可以指定日期格式,帮助库正确识别:
using (var package = new ExcelPackage(new FileInfo("你的文件路径"))) { var worksheet = package.Workbook.Worksheets[sheetName]; // 设置单元格格式匹配Excel的日期格式 worksheet.Cells.Style.Numberformat.Format = "dd/mm/yyyy"; // 加载数据时确保强类型映射正常 var empDetails = worksheet.Cells.LoadFromCollection<Réception_camions>(); // ...后续逻辑 }
内容的提问来源于stack exchange,提问作者M.LOOK
相关产品推荐
相关产品推荐

