2014-09-02 2 views
1

epplus를 사용하여 Excel 파일을 읽는 중입니다. 각 행과 각 열을 반복하고 컬렉션에 대해 확인하고 열 머리글을 찾아보고 싶습니다. 일치하는 경우는 셀의 값. 나는 epplus에 익숙하지 않으며 이런 식으로 어떤 참조도 찾을 수 없었다. this link에서 비슷한 질문을 들었지만 열 머리글을 통해 반복되는 내용이 없습니다.epplus를 사용하여 excel에서 열 머리글을 읽는 방법

이렇게 할 가능성이 있습니까? 어떤 도움이라도 대단히 감사합니다.

감사합니다.

+0

이 당신을 통해 루프를 제공하는 링크에 답하고 헤더를 잡아하지 않습니다 :

은 여기 같이 IndexOf를 사용하는 제안을 찾았나요? – Chris

답변

2

당신은 당신이이 기능을 사용할 수 있습니다 지정한 이름과 일치하는 Excel 파일의 열을 찾으려면 :

public string FindColumnAddress(ExcelWorksheet sheet, string columnName) 
    { 

     int totalRows = sheet.Dimension.End.Row; 
     int totalCols = sheet.Dimension.End.Column; 
     var range = sheet.Cells[1, 1, 1, totalCols]; 
     for (int i = 1; i <= totalCols; i++) 
     { 
      if (range[1, i].Address != "" && range[1, i].Value != null && range[1, i].Value.ToString() == columnName) 
       return range[1, i].Address; 

     } 
     return null; 
    } 

그것은 열 헤더의 주소를 반환합니다. i를 열 색인으로 반환하도록 변경할 수 있습니다.

1

또는 당신은 Linq에를 사용하여 솔루션을 선호하는 경우 :

/// <summary> 
    /// Get 1 based column number of first column with 'columnName' as column header 
    /// </summary> 
    /// <param name="sheet"></param> 
    /// <param name="columnName">Column name to find</param> 
    /// <returns>1 based column number if found or null if column not found</returns> 
    public int? FindColumnAddress(ExcelWorksheet sheet, string columnName) 
    { 

     int totalCols = sheet.Dimension.End.Column; 
     var header = sheet.Cells[1, 1, 1, totalCols].ToList(); 

     var idx = header.IndexOf(header.FirstOrDefault(hdritm => hdritm.Text == columnName)); 

     return idx < 0 ? (int?)null : idx + 1; 
    } 

참고 : 많은 열 머리글 위치를 검색하는 경우, 당신은 "헤더"목록을 생성 한 다음에 LINQ 쿼리를 사용 할 수 있습니다 모든 검색에 대해 목록을 다시 작성하지 않고 각 열 번호를 검색하십시오.

Get List<> element position in c# using LINQ

관련 문제