非美区域设置下,如何让ClosedXML始终用小数点写入Decimal数值?
解决ClosedXML非美国区域Decimal数值显示逗号的问题
下面是几种可行的解决方法:
强制设置单元格数字格式
在调用InsertData()之后,针对包含Decimal数值的列设置明确的数字格式,确保小数点不受系统区域影响:// 示例:设置第3列(从1开始计数)为保留两位小数的格式 worksheet.Column(3).Style.NumberFormat.Format = "0.00"; // 如需千分位分隔,可使用格式:"#,##0.00"该格式中的
.会被Excel识别为小数点,不受系统区域设置干扰。自定义类型转换器(插入时直接处理)
给ClosedXML注册针对Decimal类型的全局转换器,让InsertData()写入时直接采用不变文化的格式:// 在初始化代码中注册,只需执行一次 XLDataTypeConverter.RegisterConverter<decimal>( value => value.ToString(System.Globalization.CultureInfo.InvariantCulture), input => decimal.Parse(input, System.Globalization.CultureInfo.InvariantCulture) );利用
CultureInfo.InvariantCulture可确保输出始终为小数点格式,与系统区域无关。应急方案:转换为字符串插入(不推荐)
若临时需要快速解决,可将Decimal字段提前转换为带小数点的字符串后再插入,但此方法会将数值转为文本类型,影响后续Excel内的计算操作:var formattedData = originalList.Select(item => new { // 保留其他属性,仅转换Decimal字段 TargetDecimalField = item.TargetDecimalField.ToString(System.Globalization.CultureInfo.InvariantCulture) }).ToList(); worksheet.InsertData(formattedData);
内容的提问来源于stack exchange,提问作者destroyer 38
相关产品推荐
相关产品推荐

