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
'programing' 카테고리의 다른 글
Vuex와의 완벽한 논리적 디커플링 (0) | 2023.06.09 |
---|---|
Symfony2 동작을 워드프레스에 내장하는 방법은? (0) | 2023.06.09 |
VueX Store에서 계산된 속성으로 Ajax를 호출하는 올바른 방법은 무엇입니까? (0) | 2023.06.09 |
문자 배열을 C의 정수로 변환 (0) | 2023.06.09 |
VUE 경로 리디렉션이 다른 페이지에서 모달을 닫지 않음 (0) | 2023.06.09 |