ASP.NET C#设置意大利语默认语言及生成意大利语日期Excel
解决ClosedXML生成Excel时意大利语日期格式显示为英文的问题
我刚碰到过类似的问题,核心原因是你搞混了ASP.NET Core的请求本地化和ClosedXML/Excel的区域格式依赖——你在Startup里配置的CultureInfo只作用于Web请求的处理逻辑,和Excel单元格的日期语言显示没关系。下面给你两种可行的解决方案:
方法一:设置ClosedXML工作簿的LCID(推荐)
Excel的日期格式(比如DDDD对应的星期名称)是基于自身的区域ID(LCID)解析的,意大利语的LCID是1040。你只需要在创建工作簿时指定这个LCID,就能让Excel用意大利语渲染日期格式:
// 创建工作簿时直接设置LCID var workbook = new XLWorkbook(); workbook.LCID = 1040; // 对应it-IT区域 var worksheet = workbook.Worksheets.Add("Attivita"); foreach (Attivita attivita in listAttivita) { // 只赋值日期部分,避免时间00:00的干扰 worksheet.Cell(index, 1).Value = attivita.Data.Date; // 保持你的格式设置 worksheet.Cell(index, 1).Style.NumberFormat.Format = "DDDD D-MM-yyyy"; // 其他单元格赋值逻辑不变 worksheet.Cell(index, 2).Value = attivita.Ord; worksheet.Cell(index, 3).Value = attivita.Straord; worksheet.Cell(index, 4).Value = attivita.Per; worksheet.Cell(index, 5).Value = attivita.Fer; worksheet.Cell(index, 6).Value = attivita.Mala; worksheet.Cell(index, 7).Value = attivita.Infor; worksheet.Cell(index, 8).Value = attivita.Cassa; index++; }
这样生成的Excel里,DDDD会自动显示为意大利语的星期名称(比如Lunedì、Martedì),而且单元格依然是日期类型,支持Excel的日期运算。
方法二:直接生成意大利语日期文本(应急方案)
如果方法一在你的环境里不生效,你可以把日期先转成意大利语格式的字符串,但要注意只保留日期部分:
foreach (Attivita attivita in listAttivita) { // 用it-IT文化直接生成格式化字符串,只取日期部分 worksheet.Cell(index, 1).Value = attivita.Data.ToString("dddd d-MM-yyyy", new CultureInfo("it-IT")); // 其他单元格赋值逻辑不变 index++; }
⚠️ 注意:这种方式生成的是文本单元格,不是日期类型,无法在Excel里做排序、筛选或日期计算,只适合纯展示场景。
关于Startup本地化配置的补充
你在Startup里的配置本身是正确的,但它只影响Web请求的本地化(比如页面显示、模型验证提示等),和ClosedXML生成Excel完全无关。如果发布到IIS后Web端的本地化也失效,可以检查:
- IIS应用池的高级设置里是否强制设置了其他文化
- 服务器是否安装了意大利语的Windows语言包
内容的提问来源于stack exchange,提问作者ewardz1
相关产品推荐
相关产品推荐

