使用ClosedXML导出Excel时日期日与月被错误切换
解决ClosedXML导出Excel日期格式错乱问题
问题根源
你当前的代码把DateTime转成字符串后再赋值给单元格,Excel会根据系统区域设置自动识别日期格式。比如你的系统区域默认是MM.dd.yyyy格式,当字符串是05.12.2024 10:00:00时,Excel会错误地把它解析成12月5日,再按你设置的dd.MM.yyyy格式显示时,就变成了12.05.2024 10:00:00,也就是日和月颠倒;而日期为13及以上时,因为不存在13月,Excel无法按MM.dd解析,就会保留你设置的格式。
修正方案
直接给单元格赋值DateTime对象,不要转成字符串,同时设置正确的数字格式:
var date = Convert.ToDateTime(colValue); // 直接赋值DateTime类型,避免Excel自动解析字符串 worksheet.Cell(x, y).Value = date; // 强制设置单元格显示格式 worksheet.Cell(x, y).Style.NumberFormat.Format = "dd.MM.yyyy HH:mm:ss";
额外优化(可选)
如果colValue本身是固定格式的字符串,建议用DateTime.ParseExact明确指定解析格式,避免系统区域差异导致解析错误:
using System.Globalization; // 假设colValue的格式是dd.MM.yyyy HH:mm:ss,用InvariantCulture确保解析不受系统区域影响 var date = DateTime.ParseExact(colValue, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture); worksheet.Cell(x, y).Value = date; worksheet.Cell(x, y).Style.NumberFormat.Format = "dd.MM.yyyy HH:mm:ss";
内容的提问来源于stack exchange,提问作者Iraj
相关产品推荐
相关产品推荐

