2014-12-30 2 views
1

스프레드 시트 기어를 사용하여 워크 시트의 범위를 다른 워크 시트의 "입력"범위로 복사하고 수동으로 WorkbookSet을 다시 계산합니다. 재 계산 후 수식이나 계산 오류가 있는지 쉽게 확인할 수있는 방법이 있습니까?SpreadsheetGear에서 수식 또는 계산 오류를 확인하려면 어떻게합니까?

대상 통합 문서는 복사 된 문서에 따라 워크 시트에 걸친 많은 수식과 복잡하므로 모든 계산 오류를 찾는 간단한 전역 방법이 유용합니다.

답변

1

"오류"로 말하면 #NUM !, # VALUE, #NAME? 등과 같은 Excel 수식 오류 값을 의미한다고 생각하십니까? 불행히도 통합 문서에 재 계산 후 하나 이상의 통합 문서가 있는지 여부를 확인할 수있는 속성은 없습니다. 이렇게하는 유일한 방법은 수동으로 통합 문서의 모든 관련 셀을 수동으로 반복하고 오류 값 유형을 확인하는 것입니다. 크고 복잡한 통합 문서의 경우 이것이 가능하지 않을 수도 있음을 이해합니다.

이와 같은 방법으로 가능한 한이 오류 검사를 관심있는 작은 범위 또는 범위 집합으로 제한하는 것이 좋습니다. 둘째, "고성능"API 사용을 고려할 수 있습니다 SpreadsheetGear.Advanced. Cells 네임 스페이스를 사용하면 기존의 IRange 인터페이스를 사용하는 것보다 약간 더 나은 성능을 얻을 수 있습니다. 다음은 이러한 접근 방식을 보여주는 예입니다. 필요에 따라 필요에 따라 수정하십시오.

using SpreadsheetGear.Advanced.Cells; 
... 
private bool RangeContainsErrors(IRange range) 
{ 
    // We obtain a "high performance" IValues object by casting a worksheet 
    // to IValues. 
    IValues values = (IValues)range.Worksheet; 

    // Setup some indexes to help clarify and shorten the for loops. 
    int startRow = range.Row; 
    int startCol = range.Column; 
    int endRow = startRow + range.RowCount; 
    int endCol = startCol + range.ColumnCount; 

    // Loop through rows of desired range. 
    for (int row = startRow; row < endRow; row++) 
    { 
     // Now loop through columns of desired range. 
     for (int col = startCol; col < endCol; col++) 
     { 
      // Get an IValue object for this cell. 
      IValue val = values[row, col]; 

      // Check to ensure this cell even as a value and if so, check 
      // for an Error value type. 
      if(val != null && 
       val.Type == SpreadsheetGear.Advanced.Cells.ValueType.Error) 
      { 
       return true; 
      } 
     } 
    } 

    // If we made it this far there weren't any errors. 
    return false; 
} 
+0

예, 수식 오류를 감지하고 싶습니다. 코드 예제를 보내 주셔서 감사 드리며 이러한 오류에 대한 "전체적인"지표가 없음을 확인하십시오. –

0

이러한 전송에 대한 조언이 있습니다. 당신이 workbookSet.Calculate();

  • @ 팀 안데르센의 대답해야 할 때마다

    1. 약간 주제에서 벗어난,하지만 당신은 IValue에 액세스하는 방법을 보여줍니다 명시 적으로 수동 workbookSet.Calculation = SpreadsheetGear.Calculation.Manual; 및 트리거 계산을 설정합니다. 거기에서 Text 또는 Number 속성을 읽어 올바른 값 유형을 읽을 수 있습니다.
    2. 설정하려는 경우 SetText 또는 SetNumnber으로 말할 수 있습니다.
    3. 셀이 비어 있으면 IValue은 단순히 null이됩니다!

    고급 인터페이스가 일반 인터페이스와 다르므로 범위 이름별로 셀을 지정하는 방법을 찾지 못했습니다. 인터페이스에서 허용하지 않는 것처럼 보입니다. 0 기반 행 - 열 인덱스로 셀을 인덱싱 할 수 있습니다.

  • 관련 문제