使用NPOIPlus在C#中读取Excel时空白单元格.Text显示为NaN的问题
解决方案
注:你代码中使用的是EPPlus的ExcelPackage,而非NPOIPlus,以下解决方案基于EPPlus展开。
一、获取单元格实际显示文本
你当前使用的cell.Text在处理空数值单元格或公式返回NaN的场景下,可能和Excel界面显示不一致。要获取和Excel界面完全匹配的显示文本,推荐使用GetFormattedValue()方法,它会严格遵循单元格的格式设置返回内容:
var package = new ExcelPackage(stream); var workSheet = package.Workbook.Worksheets[parameters.workSheetNumber]; var cell = workSheet.Cells[row, column]; // 获取与Excel界面一致的显示文本 string displayText = cell.GetFormattedValue();
如果单元格在Excel中显示为空,这个方法会直接返回空字符串,而非NaN。
二、区分NaN的来源
要判断读取到的NaN是数值计算结果还是单元格本身的文本值,可以通过以下方式:
1. 检查单元格数据类型与值
var cell = workSheet.Cells[row, column]; if (cell.DataType == ExcelCellType.Numeric) { // 数值类型场景:判断是否为数值型NaN if (cell.Value is double val && double.IsNaN(val)) { // 此NaN是数值计算结果(如公式错误、空数值单元格),并非单元格文本 } } else if (cell.DataType == ExcelCellType.String) { // 字符串类型场景:判断是否是文本"NaN" if (cell.Text.Equals("NaN", StringComparison.OrdinalIgnoreCase)) { // 单元格实际存储的文本就是NaN } }
2. 直接校验Value的类型
也可以跳过数据类型判断,直接检查cell.Value的类型:
var cellValue = cell.Value; if (cellValue is double doubleVal && double.IsNaN(doubleVal)) { // 来自数值计算的NaN } else if (cellValue is string strVal && strVal == "NaN") { // 单元格本身的文本内容为NaN }
内容的提问来源于stack exchange,提问作者The Lemon
相关产品推荐
相关产品推荐

