德国服务器上Aspose Worksheet解析十进制数忽略点分隔符问题
问题原因
- 区域文化不一致:Sitecore 手动触发任务时,线程会继承当前登录用户的区域配置(通常为en-US),但计划任务默认使用服务器操作系统的区域文化,德国服务器默认是de-DE。de-DE的数值规则是点作为千分位分隔符,逗号作为小数分隔符,和你文件使用的en-US格式(点为小数分隔符,逗号为千分位)完全相反。
- CSV解析阶段就出错:你初始化CSV类型的LoadOptions时没有指定解析用的文化,Aspose.Cells默认使用当前线程的文化解析CSV内容,所以原文件中的
2074.927会被de-DE文化错误识别为2074*1000 + 927 = 2074927,这就是DoubleValue从一开始就错误的核心原因,后续再做格式转换也无法修正已经解析错误的数值。 - 数值误识别为日期:同样是因为de-DE文化的日期格式匹配规则,
12.7这类数值会被Aspose自动识别为日期类型,导致类型判断错误。
解决方案
直接从解析源头上指定正确的解析规则,不需要在解析后再做复杂的数值修正:
1. 修正CSV LoadOptions配置
在初始化.dat/.csv对应的LoadOptions时,明确指定解析用的文化为en-US,同时可关闭自动日期转换避免数值被误识别为日期:
else if (filename.EndsWith(".dat") || filename.EndsWith(".csv")) { loadOptions = new Aspose.Cells.LoadOptions(LoadFormat.CSV); // 明确指定CSV解析使用en-US文化,匹配文件的数值格式规则 loadOptions.CultureInfo = new CultureInfo("en-US", false); // 关闭自动将数值识别为日期,避免12.7这类值被误转为日期类型 loadOptions.ConvertDateTimeData = false; }
2. 移除后续冗余的数值修正逻辑
修改后Aspose在加载Workbook阶段就会正确解析数值,cellInfo.DoubleValue会返回正确的数值,你后续新增的尝试修复数值的代码可以完全删除,恢复原来的读取逻辑即可。
验证说明
修改后无论当前线程是何种区域文化,Aspose解析CSV时都会使用你指定的en-US文化,计划任务和手动触发都会得到一致的正确结果。
内容的提问来源于stack exchange,提问作者Erica Stockwell-Alpert
相关产品推荐
相关产品推荐

