2017-03-15 3 views
1

Interop.Excel (v15)을 활용하여 고객 데이터의 일부 통합 문서를 열고 구문 분석 한 다음 일부 정보를 출력하는 C# 응용 프로그램이 있습니다. 내가 가지고있는 문제는 일부 통합 문서 셀에 # N/A 값이 있다는 것입니다. Excel에서 말하면 어떤 유형의 오류가 있음을 나타내는 CVErr입니다. 고객 데이터의 맥락에서 그들은 N/A를 사용하여 Not Applicable을 나타냅니다. 근본적인 공식 문제는 없으며 단순히 사용하는 가치입니다. 내가 검사 시도C# Interop.Excel '# N/A'셀 값이 -2146826246으로 변환됩니다.

private void traverseRows(Excel._Worksheet worksheet) 
{ 
    //Get the used Range 
    Excel.Range usedRange = worksheet.UsedRange; 

    //Last Row/Column 
    int lastUsedRow = usedRange.Row + usedRange.Rows.Count - 1; 
    int lastUsedColumn = usedRange.Column + usedRange.Rows.Columns.Count; 

    foreach (Excel.Range row in usedRange.Rows) 
    { 
     List<String> rowData = rangeToList(row); 
    } 
} 

List<string> rangeToList(Microsoft.Office.Interop.Excel.Range inputRng) 
{ 
    object[,] cellValues = (object[,])inputRng.Value2; 
    List<string> lst = cellValues.Cast<object>().ToList().ConvertAll(x => Convert.ToString(x)); 
    return lst; 
} 

Visual Studio Debug

: 나는 워크 시트 행을 통과하기 위해 아래 기능을 사용할 때

, 나는 -2146826246의 int 값을 나는 #의 N/A 건너 때마다 얻을 각 셀은 개별적으로 실행되지만 응용 프로그램이 사용 불가능한 위치로 이동하는 속도가 느려졌습니다 (대부분의 통합 문서에는 10,000 개의 행 X 38 개 열이 있음). Text, Value, & Value2로 변환하려고 시도했습니다. 비교를 실행하고 나중에 다른 통합 문서에 값을 출력 할 수 있도록 해당 형식의 # N/A 값을 읽을 수 있어야합니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?

+0

대신 @ verabtim을 리터럴로 사용하려면 문자열로 변환해야합니다. –

+0

@SivaprasathV @ 어디에서 사용할 수 있습니까? 값은 COM 행 개체에서 들어옵니다.이 형식으로도 -214682646 값이 있습니다. – slashNburn

답변

0

아래 링크를 클릭하시면 도움이 될 것입니다.

https://xldennis.wordpress.com/2006/11/29/dealing-with-cverr-values-in-net-part-ii-solutions/

모르겠습니다 만 -2146826246이 # N/A 값의 코드이기 때문에 내 제안은, 당신은 같은에 대한 셀 값/텍스트를 확인할 수 있습니다 당신은 # N/A를 추가 할 수 있습니다 "lst"목록의 텍스트로.

하지만 더 나은 방법은 OpenXml을 사용하여 Excel에서 데이터를 검색하는 것입니다.

+1

초기 연구/문제 해결 단계에서 실제로 마이크의 기사를 보았습니다. 기사는 10 세 이상이며이 문제에 대한보다 세련된 해결책이 지난 10 년 간 실현되기를 기대했습니다 (즉, 수동으로 # N/A를 모두 번역하지 않아도 됨). OpenXml을 살펴 보겠습니다. – slashNburn