gpt4 book ai didi

c# - C#中如何判断单元格是否有公式错误

转载 作者:IT王子 更新时间:2023-10-29 04:25:28 24 4
gpt4 key购买 nike

在 Excel 公式中,您可以使用 =ISERR(A1)=ISERROR(A1)

在 VBA 宏中,您可以使用 IsError(sheet.Cells(1, 1))

但是使用 VSTO Excel Addin 项目我没有在 Microsoft.Office.Interop.Excel API 下找到类似的功能。我只想知道单元格中是否有错误,我对错误的类型并不感兴趣。

我目前的解决方法是对所有现有的错误消息执行此操作。:

if (((Range)sheet.Cells[1, 1]).Text == "#N/A" || ...)

有没有更好的方法来做到这一点。 API 中有一个简单的函数吗?

最佳答案

在 .NET 中处理 CVErr 值是一个非常棘手的问题。问题是 .NET(理所当然地)认为 CVErr 在错误处理方面已经过时了。然而,CVErr 值仍在 Excel 单元格中使用,因此这是 Excel 自动化的一个相当大的遗漏。

幸运的是,有一个解决方法。检查 CVErr 值的方法是检查单元格保存的数据类型。如果保存的值被键入为整数 (Int32),则保存的值是 CVErr。 (请注意,单元格中保存的数值通常输入为 Double,只有 CVerr 值可以输入为 Integer。)

也就是说,在最简单的级别上,要测试 CVErr 值,您需要做的就是使用以下函数:

bool IsXLCVErr(object obj)
{
return obj is Int32;
}

如果您需要检查特定的 CVErr 值(例如,#N/A),那么您首先要检查以确保数据类型是 Integer (Int32),然后检查单元格保存的特定值,根据这张表:

  • -2146826281 = #DIV/0!
  • -2146826246 = #N/A
  • -2146826245 = #GETTING_DATA
  • -2146826259 = #NAME?
  • -2146826288 = #NULL!
  • -2146826252 = #NUM!
  • -2146826265 = #REF!
  • -2146826273 = #VALUE!

例如,您的代码可能如下所示:

enum CVErrEnum : Int32
{
ErrDiv0 = -2146826281,
ErrGettingData = -2146826245,
ErrNA = -2146826246,
ErrName = -2146826259,
ErrNull = -2146826288,
ErrNum = -2146826252,
ErrRef = -2146826265,
ErrValue = -2146826273
}

bool IsXLCVErr(object obj)
{
return (obj) is Int32;
}

bool IsXLCVErr(object obj, CVErrEnum whichError)
{
return (obj is Int32) && ((Int32)obj == (Int32)whichError);
}

几年前我写了一篇详细的两部分文章:

文章是为 VB.NET 编写的,但原理与 C# 完全相同。

关于c# - C#中如何判断单元格是否有公式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com