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

Pilalo Jovanitho·2026년 9월 15일

Excel 파일은 데이터를 표 형식으로 정리하고 서식을 적용하는 데 강력한 도구이지만, 데이터베이스 가져오기, ETL(추출·변환·적재) 프로세스, 또는 다른 분석 도구와의 연동을 위해서는 CSV(쉼표로 구분된 값) 형식이 더 적합한 경우가 많습니다. CSV 파일은 텍스트 기반으로 가볍고 파싱이 쉬워 다양한 시스템에서 폭넓게 지원됩니다.

이 글에서는 C#에서 Excel 워크시트를 CSV 파일로 변환하는 방법을 살펴보겠습니다.

Excel을 CSV로 변환하는 이유

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

  • 데이터베이스 가져오기: 대부분의 데이터베이스 시스템은 CSV 파일을 통한 대량 데이터 가져오기를 지원합니다.
  • 데이터 분석 도구 연동: Python의 pandas, R, 또는 기타 분석 도구는 CSV 형식을 기본적으로 처리합니다.
  • ETL 파이프라인: 데이터 처리 워크플로우에서 중간 형식으로 CSV가 자주 사용됩니다.
  • 파일 크기 및 호환성: CSV는 Excel 파일보다 크기가 작고, 다양한 운영체제와 애플리케이션에서 열 수 있습니다.

사용할 라이브러리

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

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

라이브러리 설치

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

PM> Install-Package Spire.XLS

Excel을 CSV로 변환하기

Excel 파일의 특정 워크시트를 CSV 파일로 변환하는 과정은 다음과 같습니다:

  1. Workbook 클래스의 인스턴스를 초기화합니다.
  2. LoadFromFile 메서드를 사용하여 Excel 파일을 로드합니다.
  3. Worksheet 객체를 가져옵니다.
  4. SaveToFile 메서드를 호출하여 CSV 형식으로 저장합니다.

기본 변환 코드 예제

using Spire.Xls;
using System.Text;

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

            // Excel 파일 로드
            workbook.LoadFromFile("Sample.xlsx");

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

            // CSV로 저장 (UTF-8 인코딩, 쉼표 구분자)
            sheet.SaveToFile("ExcelToCSV.csv", ",", Encoding.UTF8);

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

SaveToFile 메서드는 파일 이름, 구분자, 인코딩을 매개변수로 받습니다. 위 예제에서는 쉼표를 구분자로, UTF-8을 인코딩으로 지정했습니다 .

SaveToFile 메서드 오버로드

SaveToFile 메서드는 다음과 같은 오버로드를 제공합니다 :

오버로드설명
SaveToFile(string fileName, string separator)파일 이름과 구분자만 지정
SaveToFile(string fileName, string separator, Encoding encoding)파일 이름, 구분자, 인코딩 지정
SaveToFile(string fileName, string separator, bool retainHiddenData)파일 이름, 구분자, 숨겨진 데이터 유지 여부 지정

CSV 출력 사용자 정의하기

Excel 데이터를 CSV로 내보낼 때 구분자, 인코딩 등을 조정하여 다양한 요구사항에 대응할 수 있습니다 .

구분자 변경

유럽 일부 지역에서는 세미콜론(;)이 기본 구분자로 사용됩니다. 이 경우 두 번째 매개변수를 변경합니다:

// 세미콜론을 구분자로 사용
sheet.SaveToFile("ExcelToCSV.csv", ";", Encoding.UTF8);

인코딩 지정

한글이나 기타 비ASCII 문자가 포함된 데이터의 경우 UTF-8 인코딩을 사용하는 것이 일반적입니다. 특정 시스템에서 다른 인코딩이 필요한 경우 해당 인코딩을 지정할 수 있습니다:

// EUC-KR 인코딩 사용 (한국 환경)
sheet.SaveToFile("ExcelToCSV.csv", ",", Encoding.GetEncoding("EUC-KR"));

여러 워크시트를 개별 CSV 파일로 변환하기

워크북에 여러 워크시트가 있는 경우, 각 워크시트를 개별 CSV 파일로 변환할 수 있습니다.

C# 코드 예제

using Spire.Xls;
using System.Text;

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

            // Excel 파일 로드
            workbook.LoadFromFile("Sample.xlsx");

            // 모든 워크시트를 반복
            for (int i = 0; i < workbook.Worksheets.Count; i++)
            {
                Worksheet sheet = workbook.Worksheets[i];

                // 각 워크시트를 CSV로 저장
                string fileName = $"Sheet_{i + 1}.csv";
                sheet.SaveToFile(fileName, ",", Encoding.UTF8);

                System.Console.WriteLine($"{fileName} 저장 완료");
            }

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

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

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

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

  2. 처리 시간: 셀 수가 많을수록 변환 시간이 증가합니다. 데이터베이스 가져오기 등 후속 작업까지 고려한 시간 계획이 필요합니다.

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

CSV 변환 시 주의할 점

Excel을 CSV로 변환할 때 다음과 같은 데이터 손실 가능성을 인지해야 합니다:

  • 서식 손실: 셀 배경색, 글꼴, 테두리 등 시각적 서식은 CSV에 포함되지 않습니다.
  • 수식 손실: 수식은 계산된 값으로 변환되며, 수식 자체는 저장되지 않습니다.
  • 차트 및 이미지 손실: CSV는 텍스트 데이터만 저장하므로 차트, 이미지, 도형 등은 포함되지 않습니다.
  • 여러 시트: CSV는 단일 시트만 지원하므로, 여러 워크시트가 있는 경우 각각 별도의 파일로 저장해야 합니다.

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

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

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

  2. 지원하는 형식: .xls, .xlsx, .xlsm 등 다양한 Excel 형식을 지원하는지 확인합니다.

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

  4. 성능: 대용량 파일을 처리할 때의 성능을 고려해야 합니다.

마무리

C#에서 Excel 워크시트를 CSV 파일로 변환하는 것은 적절한 라이브러리를 사용하면 간단하게 구현할 수 있습니다. SaveToFile 메서드를 사용하여 파일 이름, 구분자, 인코딩을 지정함으로써 다양한 환경에 맞는 CSV 파일을 생성할 수 있습니다.

데이터베이스 가져오기, ETL 파이프라인, 분석 도구 연동 등 다양한 상황에서 Excel 데이터를 CSV로 변환하는 기능을 활용할 수 있습니다. 변환 시 서식과 수식이 손실된다는 점을 인지하고, 대상 시스템의 요구사항에 맞는 구분자와 인코딩을 선택하시기 바랍니다.

0개의 댓글