C#으로 엑셀의 테이블을 효과적으로 읽는 방법에 대해 소개한다. 내가 만든 라이브러리와 그 사용법에 대한 소개이다.

엑셀 세팅

두 시트가 있는 엑셀파일을 가정하고, 그 시트에 있는 데이터를 효과적으로 추출하는 것이 목적이다. 첫 시트는 학생성적이라는 시트인데 각 학생들의 날짜별 과목 성적이 나타나있다. 두번째 시트는 학생들의 성적 합계를 계산했다. 여기서 얻고 싶은 데이터는 학생성적 시트의 A1:D25셀, 성적취합 시트의 B5:C9셀이다.

학생성적 시트

성적취합 시트

라이브러리 위치

현재 라이브러리는 GitHub의 Repository로 존재한다. Extensions 프로젝트 안에 ExcelHelper.cs ExcelWorkbook.cs 를 참조하면 된다.

엑셀 라이브러리는 EPPlus를 사용했다.

사용법

LinqPad를 사용하여 예제를 보이려고 한다.

엑셀 표 필드의 이름이 한글이거나 공백이 있을 수 있다. 그것은 FieldNameAttribute를 통해 해결할 수 있다. 인자로 엑셀의 필드 이름을 적어주면 된다. 물론 엑셀의 필드이름과 class의 변수명이 같다면 생략할 수 있다.

GetTable 함수의 generic 인자로 class 를 넣으면 되고, 시트이름을 적는다.

표의 시작 위치가 A1셀이면 시트이름만 적으면 되고, 성적취합 시트처럼 중간에 시작하게 되면 시작 행과 열을 명시해야한다.


void Main()
{
    var path = @"C:\Users\jkw\Documents\table-data.xlsx";
    using (var workbook = new ExcelWorkbook(path))
    {
        workbook.GetTable< StudentScore >("학생성적").Dump();

        // B5셀부터 테이블이 시작한다.
        workbook.GetTable< SummaryData >("성적취합", 5, 2).Dump();
    }
}

class StudentScore
{
    [FieldName("시험일")] // 필드명이 같다명 생략할 수 있다.
    public DateTime Date { get; set; }
    [FieldName("이름")]
    public string Name { get; set; }
    [FieldName("과목")]
    public string Subject { get; set; }
    [FieldName("점수")]
    public int Score { get; set; }
}

class SummaryData
{
    [FieldName("이름")]
    public string Name { get; set; }
    [FieldName("합계")]
    public string Sum { get; set; }
}

결과

실행결과