programing

C#의 수식에 셀에 오류가 있는지 확인하는 방법

css3 2023. 6. 9. 22:18

C#의 수식에 셀에 오류가 있는지 확인하는 방법

Excel 공식에서 사용할 수 있습니다.=ISERR(A1)또는=ISERROR(A1)

VBA 매크로에서 사용할 수 있습니다.IsError(sheet.Cells(1, 1))

그러나 VSTO Excel Addin 프로젝트를 사용하면서 Microsoft에서 유사한 기능을 찾을 수 없었습니다.사무실. 인터럽트.Excel API.저는 셀에 오류가 있는지 알고 싶을 뿐, 오류의 종류에는 별로 관심이 없습니다.

현재 해결 방법은 기존의 모든 오류 메시지에 대해 이 작업을 수행하는 것입니다.:

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

더 좋은 방법이 있을까요?API에 그것을 위한 간단한 기능이 있습니까?

.NET에서 CVErr 값을 다루는 것은 매우 까다로운 주제입니다.문제는 .NET이 오류 처리와 관련하여 CVErr을 쓸모없는 것으로 간주한다는 것입니다. 그러나 CVEr 값은 Excel 셀에서 여전히 사용되고 있으므로 Excel 자동화에 있어 다소 큰 누락입니다.

다행히도 해결책이 있습니다.CVErr 값을 확인하는 방법은 셀이 보유한 데이터 유형을 검사하는 것입니다.홀드 값을 정수(Int32)로 입력하면 홀드 값이 CVErr이 됩니다. (셀에 보관된 숫자 값은 일반적으로 Double로 입력되며, CVerr 값만 정수로 입력할 수 있습니다.)

즉, 가장 간단한 수준에서 CVErr 값을 테스트하려면 다음 함수를 사용하기만 하면 됩니다.

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

특정 CVErr 값(예: #N/A)을 확인해야 하는 경우 먼저 데이터 유형이 정수(Int32)인지 확인한 후 다음 표에 따라 셀이 보유한 특정 값을 확인합니다.

  • -1656826281 = #DIV/0!
  • -1696826246 = #해당없음
  • -1656826245 = #GETING_DATA
  • -1656826259 = #NAME?
  • -1656826288 = #NULL!
  • -1676826252 = #Num!
  • -16568265 = #REF!
  • -1656826273 = #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#용과 정확히 동일합니다.

사용할 수 있습니다.WorksheetFunction방법:

Globals.ThisAddIn.Application.WorksheetFunction.IsErr(...)

또는

[Your Excel Object].WorksheetFunction.IsErr(...)

IsErr는 실제 값인 AFAIK의 셀 참조 패스 대신 Excel 워크시트 함수와 의미적으로 동일합니다.

언급URL : https://stackoverflow.com/questions/2424718/how-to-know-if-a-cell-has-an-error-in-the-formula-in-c-sharp