You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:57:18