C#에서 Excel 워크시트를 여러 파일로 분할
Source: Dev.to
Source:
소개
현대 데이터 처리 워크플로우에서 다중 워크시트 Excel 파일을 개별 단일 워크시트 파일로 분할하는 작업은 매우 흔한 요구 사항입니다—부서별 재무 보고서를 배포하거나, 학급별 학생 성적표를 공유하거나, 구분된 데이터 세트를 정리할 때 등입니다. 수동으로 분할하면 번거롭고 시간이 많이 소요되며, 인간 오류가 발생하기 쉬워 데이터 일관성에 문제가 생깁니다.
C# 로 이 프로세스를 자동화하면 생산성을 크게 높일 수 있으며, Free Spire.XLS—가볍고 강력한 .NET 라이브러리—를 사용하면 Microsoft Office 설치 없이도 훨씬 간단하게 구현할 수 있습니다.
이 가이드는 C#와 Free Spire.XLS를 사용하여 Excel 워크시트를 분할하는 전체 과정을 단계별로 안내합니다. 다음 내용을 다룹니다:
- 프로젝트 설정
- 핵심 코드 구현
- 고급 사용 사례
- 대체 라이브러리
기술 스택 개요
- Language: C#
- Frameworks: .NET Framework 4.0+, .NET Core 3.1+, .NET 5+
- Library: Free Spire.XLS (NuGet)
- IDE: Visual Studio 2019+, Rider, VS Code, 또는 모든 C# IDE
Free Spire.XLS를 선택해야 하는 이유
Free Spire.XLS는 원활한 Excel 파일 조작을 위해 설계된 무료 .NET Excel 컴포넌트입니다. 전통적인 솔루션인 Microsoft Office Interop과 비교했을 때 세 가지 주요 장점이 있습니다:
| 장점 | 설명 |
|---|---|
| Office 의존성 없음 | 서버나 클라이언트 머신에 Microsoft Office를 설치할 필요 없이 작동하여 호환성 및 라이선스 문제를 제거합니다. |
| 풍부한 기능 | Excel 파일(.xls & .xlsx)을 생성, 편집, 변환, 분할할 수 있으며 데이터, 수식, 스타일, 서식을 완전히 유지합니다. |
| 높은 성능 | 배치 처리 및 서버‑사이드 자동화를 위해 최적화되어 있어 Interop보다 속도와 안정성이 뛰어납니다. |
전제 조건
따라 하려면 개발 환경이 다음 요구 사항을 충족하는지 확인하십시오:
- .NET Framework 4.0+ / .NET Core 3.1+ / .NET 5+
- 무료 Spire.XLS NuGet 패키지 (최신 버전 권장)
- Visual Studio 2019+ / Rider / VS Code (또는 기타 C# IDE)
단계별 구현
1. 프로젝트 설정
-
IDE에서 새 C# 콘솔 앱 프로젝트를 생성합니다.
-
NuGet을 통해 Free Spire.XLS를 설치합니다:
-
패키지 관리자 콘솔
Install-Package FreeSpire.XLS -
GUI 방법
프로젝트를 오른쪽 클릭 → NuGet 패키지 관리 → “FreeSpire.XLS” 검색 → 설치.
-
2. 핵심 코드 구현 (상세 설명 포함)
핵심 로직은 다음과 같습니다:
- 원본 Excel 파일을 로드합니다.
- 워크시트를 순회합니다.
- 각 워크시트를 새 워크북에 복사합니다.
- 새 파일을 저장합니다.
using Spire.Xls;
using System;
using System.IO;
namespace ExcelWorksheetSplitter
{
class Program
{
static void Main(string[] args)
{
// -------------------------------------------------
// 1️⃣ Configure file paths (update to match your environment)
// -------------------------------------------------
string sourceFilePath = "source.xlsx"; // Path to your multi‑worksheet Excel file
string outputDirectory = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"SplitWorksheets");
try
{
// -------------------------------------------------
// 2️⃣ Load the source workbook
// -------------------------------------------------
using (Workbook sourceWorkbook = new Workbook())
{
sourceWorkbook.LoadFromFile(sourceFilePath);
// -------------------------------------------------
// 3️⃣ Ensure the output folder exists
// -------------------------------------------------
Directory.CreateDirectory(outputDirectory);
// -------------------------------------------------
// 4️⃣ Iterate through all worksheets
// -------------------------------------------------
for (int i = 0; i file.EndsWith(".xlsx") || file.EndsWith(".xls"))
.ToArray();
foreach (string file in excelFiles)
{
Console.WriteLine($"Processing file: {Path.GetFileName(file)}");
SplitSingleExcelFile(file,
Path.Combine(outputFolder, Path.GetFileNameWithoutExtension(file)));
}
}
// Reusable method to split a single Excel file
static void SplitSingleExcelFile(string sourceFilePath, string outputFolder)
{
using (Workbook wb = new Workbook())
{
wb.LoadFromFile(sourceFilePath);
Directory.CreateDirectory(outputFolder);
foreach (Worksheet sheet in wb.Worksheets)
{
using (Workbook newWb = new Workbook())
{
newWb.Worksheets.Clear();
newWb.Worksheets.AddCopy(sheet);
newWb.SaveToFile(
Path.Combine(outputFolder, $"{sheet.Name}.xlsx"),
ExcelVersion.Version2016);
}
}
}
}
대체 라이브러리 (비교)
| 라이브러리 | 장점 | 단점 | 추천 용도 |
|---|---|---|---|
| Free Spire.XLS | Office 의존 없음, 전체 포맷 지원, 쉬운 API | 무료 버전의 일부 제한 사항 | 빠른 개발, 서버‑사이드 자동화 |
| EPPlus | 오픈소스, 경량, .xlsx에 적합 | .xls 지원 안 함 | 간단한 .xlsx 분할 작업 |
| NPOI | 오픈소스, 워터마크 없음, 전체 포맷 지원 | 학습 곡선이 가파름 | 고급 Excel 조작 |
| Microsoft Office Interop | 네이티브 Office 통합 | Office 설치 필요, 서버에서 불안정 | 데스크톱 전용 앱 |
| ClosedXML | 직관적인 API, 오픈소스 | .xls 지원 안 함 | 현대적인 .xlsx 워크플로우 |
C#와 Free Spire.XLS를 사용한 Excel 워크시트 분할은 반복적인 데이터 처리 작업을 자동화하는 간단하고 효율적인 방법입니다. 서버‑사이드 자동화 도구를 만들든 데스크톱 앱을 만들든, Free Spire.XLS는 Excel 워크플로우를 간소화하는 신뢰할 수 있는 솔루션을 제공합니다.