Excel 파일은 데이터를 표 형식으로 정리하고 서식을 적용하는 데 유용하지만, 때로는 순수 텍스트 형식으로 데이터를 추출해야 할 필요가 있습니다. TXT 파일은 서식이 없는 순수 텍스트만 포함하므로 파일 크기가 작고, 레거시 시스템이나 텍스트 기반 데이터 파이프라인과의 호환성이 뛰어납니다.
이 글에서는 C#에서 Excel 워크시트를 TXT 파일로 변환하는 방법을 살펴보겠습니다.
Excel 데이터를 TXT로 변환하는 것은 다음과 같은 상황에서 유용합니다:
C#에서 Excel 파일을 처리하고 TXT로 변환하는 방법에는 여러 가지가 있습니다. Microsoft Office Interop을 사용하는 방법도 있지만, 이 방식은 Microsoft Excel이 설치되어 있어야 하고 서버 환경에서 불안정할 수 있다는 제약이 있습니다.
여기서는 Microsoft Office 설치 없이 작동하는 라이브러리를 사용하는 방법을 살펴보겠습니다.
NuGet 패키지 관리자를 통해 라이브러리를 설치합니다:
PM> Install-Package Spire.XLS
Excel 파일의 특정 워크시트를 TXT 파일로 변환하는 과정은 다음과 같습니다:
using Spire.Xls;
using System.Text;
namespace ExcelToTXT
{
class Program
{
static void Main(string[] args)
{
// Workbook 클래스의 인스턴스 생성
Workbook workbook = new Workbook();
// Excel 파일 로드
workbook.LoadFromFile("sample.xlsx");
// 첫 번째 워크시트 가져오기
Worksheet sheet = workbook.Worksheets[0];
// TXT 파일로 저장 (공백을 구분자로, UTF-8 인코딩)
sheet.SaveToFile("ExceltoTxt.txt", " ", Encoding.UTF8);
// 리소스 해제
workbook.Dispose();
}
}
}
SaveToFile 메서드는 파일 이름, 구분자, 인코딩을 매개변수로 받습니다. 위 예제에서는 공백을 구분자로, UTF-8을 인코딩으로 지정했습니다.
SaveToFile 메서드는 다음과 같은 오버로드를 제공합니다:
| 오버로드 | 설명 |
|---|---|
SaveToFile(string fileName, string separator) | 파일 이름과 구분자만 지정 |
SaveToFile(string fileName, string separator, Encoding encoding) | 파일 이름, 구분자, 인코딩 지정 |
Excel 데이터를 TXT로 내보낼 때 구분자와 인코딩을 조정하여 다양한 요구사항에 대응할 수 있습니다.
TXT 파일의 구분자는 대상 시스템에 따라 선택할 수 있습니다:
// 탭을 구분자로 사용 (TSV 형식)
sheet.SaveToFile("ExceltoTxt.txt", "\t", Encoding.UTF8);
// 쉼표를 구분자로 사용 (CSV와 유사)
sheet.SaveToFile("ExceltoTxt.txt", ",", Encoding.UTF8);
// 공백을 구분자로 사용
sheet.SaveToFile("ExceltoTxt.txt", " ", Encoding.UTF8);
한글이나 기타 비ASCII 문자가 포함된 데이터의 경우 UTF-8 인코딩을 사용하는 것이 일반적입니다. 레거시 시스템에서는 다른 인코딩이 필요할 수 있습니다:
// EUC-KR 인코딩 사용 (한국 레거시 환경)
sheet.SaveToFile("ExceltoTxt.txt", " ", Encoding.GetEncoding("EUC-KR"));
// ASCII 인코딩 사용 (영문만 포함된 경우)
sheet.SaveToFile("ExceltoTxt.txt", " ", Encoding.ASCII);
워크북에 여러 워크시트가 있는 경우, 각 워크시트를 개별 TXT 파일로 변환할 수 있습니다.
using Spire.Xls;
using System.Text;
namespace ConvertAllSheets
{
class Program
{
static void Main(string[] args)
{
// Workbook 클래스의 인스턴스 생성
Workbook workbook = new Workbook();
// Excel 파일 로드
workbook.LoadFromFile("multi.xlsx");
// 모든 워크시트를 반복
for (int i = 0; i < workbook.Worksheets.Count; i++)
{
Worksheet sheet = workbook.Worksheets[i];
// 각 워크시트를 TXT로 저장
string fileName = $"Sheet{i + 1}.txt";
sheet.SaveToFile(fileName, "\t", Encoding.UTF8);
System.Console.WriteLine($"{fileName} 저장 완료");
}
// 리소스 해제
workbook.Dispose();
}
}
}
대용량 Excel 파일을 TXT로 변환할 때는 다음과 같은 사항을 고려해야 합니다:
메모리 사용량: 전체 워크시트를 메모리에 로드하므로, 매우 큰 파일의 경우 메모리 부족이 발생할 수 있습니다. 이 경우 스트리밍 방식이나 청크 단위 처리를 고려해야 합니다.
처리 시간: 셀 수가 많을수록 변환 시간이 증가합니다. 후속 작업까지 고려한 시간 계획이 필요합니다.
인코딩: TXT 파일은 텍스트 기반이므로 올바른 인코딩을 지정하지 않으면 한글이나 특수 문자가 깨질 수 있습니다. 대상 시스템에서 요구하는 인코딩을 확인해야 합니다.
Excel을 TXT로 변환할 때 다음과 같은 데이터 손실 가능성을 인지해야 합니다:
Excel 파일 처리를 위한 라이브러리를 선택할 때는 다음 사항을 고려해야 합니다:
Microsoft Office 의존성: 일부 라이브러리는 Microsoft Office가 설치되어 있어야 작동합니다. 서버 환경에서는 Office 설치가 어려울 수 있으므로 독립적으로 작동하는 라이브러리를 선택하는 것이 좋습니다.
지원하는 형식: .xls, .xlsx, .xlsm 등 다양한 Excel 형식을 지원하는지 확인합니다.
라이선스: 무료 버전과 상용 버전의 기능 제한을 확인해야 합니다. 무료 버전의 경우 행 수나 시트 수에 제한이 있을 수 있습니다.
성능: 대용량 파일을 처리할 때의 성능을 고려해야 합니다.
C#에서 Excel 워크시트를 TXT 파일로 변환하는 것은 적절한 라이브러리를 사용하면 간단하게 구현할 수 있습니다. SaveToFile 메서드를 사용하여 파일 이름, 구분자, 인코딩을 지정함으로써 다양한 환경에 맞는 TXT 파일을 생성할 수 있습니다.
레거시 시스템 연동, 데이터 분석 준비, 배치 자동화 등 다양한 상황에서 Excel 데이터를 TXT로 변환하는 기능을 활용할 수 있습니다. 변환 시 서식과 수식이 손실된다는 점을 인지하고, 대상 시스템의 요구사항에 맞는 구분자와 인코딩을 선택하시기 바랍니다.