同版本EPPlus下.NET Framework与.NET 8 API返回值不一致问题排查
解决方案
1. 强制设置单元格数值格式对齐原行为
针对参与拼接的数值单元格(如K9、K8),直接设置其显示格式,确保CONCATENATE拼接时使用指定精度的字符串:
// 针对单个单元格设置6位小数格式,匹配原API输出精度 worksheet.Cells["K9"].Style.NumberFormat.Format = "0.000000"; worksheet.Cells["K8"].Style.NumberFormat.Format = "0.000000";
如果需要批量处理所有数值单元格,可以遍历工作表中的数值型单元格统一设置格式。
2. 手动控制数值转字符串的精度
如果不想修改单元格格式,可在获取单元格结果时,手动对数值进行精度截断后再拼接:
// 读取单元格数值后,按原精度格式化 var k9Value = Math.Round((double)worksheet.Cells["K9"].Value, 6).ToString(); var k8Value = Math.Round((double)worksheet.Cells["K8"].Value, 6).ToString(); // 再自行拼接结果(替代直接读取公式单元格的结果) var finalResult = $"Value k13: {k9Value}---Value L1:{worksheet.Cells["L1"].Value}---";
3. 修改公式使用TEXT函数控制精度
如果允许批量更新表格公式,将CONCATENATE中的直接单元格引用替换为TEXT函数指定精度:
CONCATENATE(TEXT(K9,"0.000000"),L9,"---",TEXT(K8,"0.000000"),L8,"---")
这样无论底层数值的实际精度如何,拼接时都会使用指定格式的字符串,彻底对齐输出。
4. 验证EPPlus计算配置
确认EPPlus的计算模式和精度相关配置与原.NET Framework环境一致:
using (var package = new ExcelPackage(fileStream)) { // 确保自动计算模式开启 package.Workbook.CalcMode = ExcelCalcMode.Automatic; // 启用兼容模式的精度计算,对齐旧版本行为 package.Workbook.CalculationOptions.PrecisionAndRoundingStrategy = ExcelPrecisionAndRoundingStrategy.Compatibility; package.Workbook.Calculate(); }
内容的提问来源于stack exchange,提问作者Caio Lucas
相关产品推荐
相关产品推荐

