空单元格在 C# 中使用 NPPlus 将 .Text 显示为“NaN”

问题描述 投票:0回答:1

我们的客户提供 Excel 文件作为输入,我们将文本撕下来进行处理。无论他们做了什么,都会导致一些单元格具有 NaN 的 .Text 属性,但在通过 Excel 本身查看时显示为空白。

我的助手类对填充的单元格进行非常简单的循环(示例代码中省略了循环)

var package = new ExcelPackage(stream)
var workSheet = package.Workbook.Worksheets[parameters.workSheetNumber];
var cell = workSheet.Cells[row, column];
value = cell.Text;

在这里我在想。文本意味着当通过应用程序查看时它会显示 Excel 显示的文本表示,但在这种情况下它不会。有没有办法获得实际的文本表示?或者,如果没有,是否有办法确认 NaN 是否存在是因为它不是数字,还是因为单元格具有 NaN 的文字文本值?

c# excel nan epplus
1个回答
1
投票

最终的问题是区分文本值“NaN”和表示为 NaN 的数值对象值。前者表示单元格文本值为 NaN,后者表示单元格认为它既是数字又不是数字并且适合。

在调试模式下通过代码运行我的输入文件,单元格的 .Text 属性在每个实例中都显示“NaN”,但 .Value 属性确实发生了变化。故障单元格的值类型都为 double。

保守的解决方案是检查 NaN doubles

if (cell.Text == "NaN" && cell.Value.GetType() == typeof(double))
    value = "";
else
    value = cell.Text;

由于其他数字类型,上述可能会因 NaN 而失败

if (cell.Text == "NaN" && cell.Value.GetType() != typeof(string))
    value = "";
else
    value = cell.Text;

如果 NaN 未作为单元格中的文字字符串提供,以上内容将修复 NaN。此解决方案的缺点,至少就原始问题而言,是可能存在 NaN 将显示在 Excel 显示中的单元格值类型,导致我们在另一个方向上更改值。

我已经针对来自许多不同客户端的数据运行了我的代码,但没有遇到这个问题,所以虽然这两种解决方案都可能存在假设性问题,但无论这个客户端做什么都很少见,所以两种解决方案都应该足够了。

© www.soinside.com 2019 - 2024. All rights reserved.