excel 显示空单元格,文本为“NaN”,使用C#中的NPPlus

igsr9ssn  于 2023-05-19  发布在  C#
关注(0)|答案(1)|浏览(366)

我们的客户提供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的文字文本值?

xjreopfe

xjreopfe1#

最终,问题是区分文本值“NaN”和表示为NaN的数字对象值。前者表示单元格的文本值是NaN,后者表示单元格认为它既是数字又不是数字,并且具有拟合。
在调试模式下运行我的输入文件,单元格的.Text属性在每个示例中都显示“NaN”,但.Value属性确实发生了变化。故障单元格的值类型都是double。
保守的解决方案是检查NaN双精度数

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将显示在Excel显示中,导致我们在另一个方向改变值。
我已经对来自许多不同客户端的数据运行了我的代码,但没有遇到这个问题,所以虽然两种解决方案都可能存在假设的问题,但无论这个客户端做了什么,这两种解决方案都应该足够了。

相关问题