C#에서 CSV 파일을 DataTable로 변환하는 방법

Pilalo Jovanitho·2026년 9월 17일

CSV(쉼표로 구분된 값) 파일은 데이터 교환과 저장에 널리 사용되는 경량 형식입니다. 하지만 데이터 필터링, 정렬, UI 바인딩, 데이터베이스 저장 등 보다 복잡한 데이터 조작이 필요할 때는 DataTable이 더 적합한 경우가 많습니다. DataTable은 .NET에서 메모리 내 관계형 데이터를 표현하는 객체로, 다양한 데이터 소스와의 연동이 용이합니다.

이 글에서는 C#에서 CSV 파일을 DataTable로 변환하는 방법을 살펴보겠습니다.

CSV를 DataTable로 변환하는 이유

CSV 데이터를 DataTable로 변환하는 것은 다음과 같은 상황에서 유용합니다:

  • 데이터 필터링 및 정렬: DataTable은 Select 메서드나 DataView를 통해 조건에 맞는 데이터를 손쉽게 추출할 수 있습니다.
  • UI 바인딩: Windows Forms의 DataGridView나 WPF의 DataGrid 컨트롤에 직접 바인딩할 수 있습니다.
  • 데이터베이스 연동: SqlBulkCopy 등을 사용하여 SQL Server와 같은 데이터베이스에 대량으로 데이터를 저장할 때 활용됩니다.
  • 구조화된 데이터 처리: 행과 열로 구성된 테이블 구조를 통해 데이터를 체계적으로 관리할 수 있습니다.

사용할 라이브러리

C#에서 CSV 파일을 처리하고 DataTable로 변환하는 방법에는 여러 가지가 있습니다. Microsoft Office Interop을 사용하는 방법도 있지만, 이 방식은 Microsoft Excel이 설치되어 있어야 한다는 제약이 있습니다.

여기서는 Microsoft Office 설치 없이 작동하는 라이브러리를 사용하는 방법을 살펴보겠습니다.

라이브러리 설치

NuGet 패키지 관리자를 통해 라이브러리를 설치합니다:

PM> Install-Package Spire.XLS

CSV를 DataTable로 변환하기

CSV 파일을 DataTable로 변환하는 과정은 다음과 같습니다:

  1. Workbook 클래스의 인스턴스를 초기화합니다.
  2. LoadFromFile 메서드를 사용하여 CSV 파일을 로드합니다.
  3. Worksheet 객체를 가져옵니다.
  4. ExportDataTable 메서드를 호출하여 DataTable로 변환합니다.

기본 변환 코드 예제

using Spire.Xls;
using System;
using System.Data;

namespace ConvertCsvToDataTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbook 클래스의 인스턴스 생성
            Workbook workbook = new Workbook();

            // CSV 파일 로드 (쉼표를 구분자로 지정)
            workbook.LoadFromFile(@"sample.csv", ",");

            // 첫 번째 워크시트 가져오기
            Worksheet worksheet = workbook.Worksheets[0];

            // 워크시트의 데이터를 DataTable로 내보내기
            DataTable dataTable = worksheet.ExportDataTable();

            // DataTable 정보 출력
            Console.WriteLine($"열 수: {dataTable.Columns.Count}");
            Console.WriteLine($"행 수: {dataTable.Rows.Count}");

            // 리소스 해제
            workbook.Dispose();
        }
    }
}

LoadFromFile 메서드는 파일 경로와 구분자를 매개변수로 받습니다 . ExportDataTable 메서드는 워크시트의 데이터를 DataTable로 변환합니다 .

ExportDataTable 메서드 오버로드

ExportDataTable 메서드는 다음과 같은 오버로드를 제공하여 변환 방식을 세부적으로 제어할 수 있습니다 :

오버로드설명
ExportDataTable()워크시트의 모든 데이터를 기본 설정으로 내보냄
ExportDataTable(CellRange range, bool exportColumnNames, bool computedFormulaValue)특정 범위를 지정하고, 열 이름 포함 여부와 수식 계산 값 포함 여부를 설정

사용자 정의 범위 지정 예제

// 특정 범위(A1:D10)만 DataTable로 내보내기
DataTable dt = worksheet.ExportDataTable(worksheet.Range["A1:D10"], true, true);

위 예제에서 첫 번째 매개변수는 내보낼 셀 범위를, 두 번째 매개변수는 열 이름(헤더)을 포함할지 여부를, 세 번째 매개변수는 수식의 계산된 값을 포함할지 여부를 지정합니다 .

CSV 로드 시 구분자 지정

CSV 파일은 항상 쉼표로 구분되는 것은 아닙니다. 유럽 일부 지역에서는 세미콜론(;)을 사용하거나, 탭(\t)을 구분자로 사용하는 경우도 있습니다. LoadFromFile 메서드의 두 번째 매개변수를 변경하여 다양한 구분자를 처리할 수 있습니다 .

// 세미콜론을 구분자로 사용하는 CSV 파일 로드
workbook.LoadFromFile(@"sample.csv", ";");

// 탭을 구분자로 사용하는 파일 로드
workbook.LoadFromFile(@"sample.tsv", "\t");

대용량 CSV 파일 처리 시 고려사항

대용량 CSV 파일을 DataTable로 변환할 때는 다음과 같은 사항을 고려해야 합니다:

  1. 메모리 사용량: DataTable은 전체 데이터를 메모리에 로드하므로, 매우 큰 파일의 경우 메모리 부족이 발생할 수 있습니다. 이 경우 청크 단위로 읽거나 스트리밍 방식을 고려해야 합니다.

  2. 처리 시간: 행과 열의 수가 많을수록 변환 시간이 증가합니다. 후속 작업까지 고려한 시간 계획이 필요합니다.

  3. 인코딩: CSV 파일은 텍스트 기반이므로 올바른 인코딩을 지정하지 않으면 한글이나 특수 문자가 깨질 수 있습니다. 대상 시스템에서 요구하는 인코딩을 확인해야 합니다.

CSV와 DataTable 변환의 활용 사례

CSV를 DataTable로 변환하는 것은 다음과 같은 상황에서 유용합니다:

  • 데이터 분석 애플리케이션: 사용자가 CSV 파일을 업로드하면 이를 DataTable로 변환하여 필터링, 검색, 정렬 기능을 제공할 수 있습니다.
  • 관리자 대시보드: 외부 시스템에서 생성된 CSV 보고서를 DataTable로 변환하여 웹 UI에 표시할 수 있습니다.
  • 배치 처리: 여러 CSV 파일을 DataTable로 변환한 후 데이터베이스에 일괄 저장하는 ETL 파이프라인을 구축할 수 있습니다.

라이브러리 선택 시 고려사항

CSV 파일 처리를 위한 라이브러리를 선택할 때는 다음 사항을 고려해야 합니다:

  1. Microsoft Office 의존성: 일부 라이브러리는 Microsoft Office가 설치되어 있어야 작동합니다. 서버 환경에서는 Office 설치가 어려울 수 있으므로 독립적으로 작동하는 라이브러리를 선택하는 것이 좋습니다.

  2. CSV 구분자 지원: 쉼표, 세미콜론, 탭 등 다양한 구분자를 지원하는지 확인합니다.

  3. DataTable 변환 기능: CSV 데이터를 직접 DataTable로 변환할 수 있는 메서드를 제공하는지 확인합니다.

  4. 라이선스: 무료 버전과 상용 버전의 기능 제한을 확인해야 합니다. 무료 버전의 경우 시트 수나 행 수에 제한이 있을 수 있습니다 .

마무리

C#에서 CSV 파일을 DataTable로 변환하는 것은 적절한 라이브러리를 사용하면 간단하게 구현할 수 있습니다. LoadFromFile 메서드로 CSV 파일을 로드한 후 ExportDataTable 메서드를 호출하면 워크시트의 데이터가 DataTable로 변환됩니다.

DataTable은 데이터 필터링, 정렬, UI 바인딩, 데이터베이스 저장 등 다양한 후속 작업에 활용할 수 있습니다. 대용량 파일을 처리할 때는 메모리 사용량과 처리 시간을 고려하고, 대상 시스템의 요구사항에 맞는 구분자와 인코딩을 지정하시기 바랍니다.

0개의 댓글