2010-01-11 5 views
3

DocumentFormat.OpenXml 라이브러리를 통해 Excel 문서를 읽었습니다. 얼마나 많은 열이 있는지 알아 보는 좋은 방법이 있습니까? 영어.NET에서 Excel 문서의 가장 오른쪽 셀 찾기

public string getMaxColumnName(SheetData aSheetData) 
{ 
    string lLastCellReference = aSheetData.Descendants<Cell>().Last().CellReference.InnerText; 
    char[] lRowNumberIndex = lLastCellReference.IndexOfAny(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }); 
    return lLastCellReference.Substring(0, lRowNumberIndex); 
} 

: 시트의 마지막 셀을 찾아 "CB99"같은 (의 셀 참조를 얻을 수

버그를 조사하는 동안 난 그냥 건너 한 현재의 코드는,이 수행), 첫 번째 숫자 앞에있는 모든 것을 검색하십시오. 문제는 시트의 마지막 셀이 맨 오른쪽 열에있을 필요가 없다는 것입니다.

나는 깔끔하고 직사각형 인 시험지를 가지고 있습니다. 함수는 문자열 "M"을 반환하기 위해 A부터 M까지 열을 1000 행으로 채 웁니다. 그러나 셀 C1522에 외래 공백 문자가 있기 때문에 마지막 셀로 계산되므로 함수는 최대 열을 "C"로보고합니다.

내 초기 충동은 그 Last() 전화를 Max(columnNumber)으로 바꾸는 것이 었습니다. 그러나 Cell은 분명히 실제 열 번호를 표시하지 않으며이 복합 문자 CellReference 문자열 만 표시합니다. 나는 술어 내부에서 문자열 분리를하고 싶지 않다고 생각한다.

모든 단일 셀의 CellReference을 구문 분석하지 않고 시트의 가장 오른쪽 열을 찾는 방법이 있습니까? 나는 형식을 알고있는 것처럼

답변

0

나는 이것이 처음부터 잘못된 것이라고 결론을 내렸다. 소비 코드는 실제로 시트 전체에서 가장 오른쪽의 셀을 찾지 않습니다.일반적으로, 원하는 행의 셀 수 (행 1 또는 알려진 테이블 머리글 위치)가 필요합니다.

실제로 렌더링 또는 인쇄를 제외하고 전체 시트의 최대 셀을 가져 오는 것이 필요한 상황을 만들 수 없습니다.

따라서 리팩터링을 약간해야합니다. 함수를 변경하여 시트와 행 인덱스를 가져와 해당 행의 맨 오른쪽 셀의 열을 반환합니다. 그 구현을 위해

public string getMaxColumnIndex(SheetData aSheetData, int aRowIndex); 

, 나는 그것이 존재하는 경우 Row.Spans 속성을 확인하거나 다른 Row.ChildElements.Last()의 셀 참조를 구문 분석 할 수 있습니다 : 즉, 지금처럼 보일 것입니다.

1

는 다양한 경우가 있습니다

  1. 파일이 Excel에서 생성되지 않은 경우 워크 시트에는 빈 행이 없는지 방식으로 데이터를 포함하고 더 빈 열이 없습니다 (모든 경우에 해당하는 것은 아닙니다.)

    당신은 꽤 망가져 있습니다. 이 경우 행 및 셀 참조 형식을 무시하십시오. 최대 값을 얻으려면 각 행의 모든 ​​셀 참조를 계산해야합니다.

  2. 파일은 Excel에서 생성되지 않고 세포 (그렇지 않은 명백하게 함) 희소 채워진 경우

    각 행의 마지막 셀이 여야 컬럼의 참조를 보유가 " r "속성. 그래도 참조를 변환해야합니다.

  3. 파일을 엑셀에 의해 생성되는 경우 일반적으로

    을, 나는하지 않는 엑셀 생성 된 파일을 발견하지 않았습니다가, 워크 시트 부분은 "심판"이 치수라는 이름의 아이를 가지고 워크 시트에서 사용하는 셀 참조 (예 : "A1 : M1001") 속성. 이것을 사용하여 열을 알고있는 경우 일뿐입니다. 물론 외래 문자가 테이블 뒤의 열에 나타나지 않는 경우에만 작동합니다.

    또는 일반적으로 모든 행과 내가 본 모든 Excel 생성 파일에는 행이 사용하는 열이있는 "범위"라는 특성이 있습니다. "스팬"속성 형식은 숫자이므로 예제에서는 표의 모든 행에 대해 값이 "1:13"이됩니다. 어쩌면이 방법으로 첫 번째 줄만 확인하면됩니다.

관련 문제