IRONSOFTWAREHOME
IRONXL 사용하여

C#에서 Excel 피벗 테이블을 만드는 방법

Curtis Chau
Curtis Chau
Updated: 2026년 4월 21일

프로그램적으로 Excel 피벗 테이블을 다루는 것은 소스 데이터를 분석하고 계산해야 하는 비즈니스 애플리케이션에서 일반적으로 요구됩니다. Microsoft의 Excel Interop은 Excel 파일에서 피벗 테이블을 만드는 전통적인 방법이었지만, 현대적인 솔루션인 IronXL은 상당한 이점을 제공합니다. 이 가이드는 두 방법을 실용적인 예제와 함께 자세히 설명하여 C# Interop을 사용하여 Excel에서 피벗 테이블을 생성하거나 더 나은 대안을 선택할 수 있도록 돕습니다.

두 가지 접근 방식 이해하기

Excel Interop이란 무엇입니까?

Excel Interop은 C#을 통해 COM(컴포넌트 오브젝트 모델)을 사용하여 Microsoft Excel을 직접 제어합니다. 시스템에 Office가 설치되어야 하며, 사용자와 애플리케이션이 상호 작용하듯이 Excel을 자동화합니다. 각 워크시트, 워크북 및 셀은 코드로 조작할 수 있는 객체가 됩니다.

IronXL이란 무엇입니까?

IronXL은 Microsoft Office를 요구하지 않고 Excel 파일을 읽고, 편집하고, 만들 수 있는 독립 실행형 .NET 라이브러리입니다. Windows, Linux, macOS 및 Docker 컨테이너에서 작동하여 현대적인 배포 시나리오에 적합합니다. COM 상호 운용의 부담 없이 데이터를 열고, 저장하고, 내보낼 수 있습니다.

환경 설정하기

Excel Interop을 위한

PM > Install-Package Microsoft.Office.Interop.Excel

IronXL을 위한

PM > Install-Package IronXL.Excel

또한, NuGet 패키지 관리자 UI를 사용하여 "IronXL.Excel"을 검색하고 설치를 클릭할 수 있습니다. .NET CLI로 명령 인수를 사용하여 설치하거나 GitHub에서 직접 참조할 수도 있습니다.

두 라이브러리는 NuGet에서 사용할 수 있습니다. Excel Interop은 전체 Microsoft Office 설치가 필요하고 IronXL은 독립적으로 작동합니다. 계속하기 전에 시스템이 요구 사항을 충족하는지 확인하세요.

C# Interop을 사용하여 프로그래밍 방식으로 Excel 피벗 테이블 생성

다음은 전통적인 Interop 접근 방식을 사용하여 프로그램적으로 피벗 테이블을 생성하는 방법을 보여주는 완전한 예제입니다:

using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        // Create Excel application instance
        var excelApp = new Excel.Application();
        var workbook = excelApp.Workbooks.Add();
                    var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
            var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
            // Add header row and sample data
            dataSheet.Cells[1, 1] = "Product";
            dataSheet.Cells[1, 2] = "Region";
            dataSheet.Cells[1, 3] = "Sales";
            // ... populate data rows with values
            // Add sample data rows
            dataSheet.Cells[2, 1] = "Laptop";
            dataSheet.Cells[2, 2] = "North";
            dataSheet.Cells[2, 3] = 1200;
            dataSheet.Cells[3, 1] = "Laptop";
            dataSheet.Cells[3, 2] = "South";
            dataSheet.Cells[3, 3] = 1500;
            dataSheet.Cells[4, 1] = "Phone";
            dataSheet.Cells[4, 2] = "North";
            dataSheet.Cells[4, 3] = 800;
            dataSheet.Cells[5, 1] = "Phone";
            dataSheet.Cells[5, 2] = "South";
            dataSheet.Cells[5, 3] = 950;
            dataSheet.Cells[6, 1] = "Tablet";
            dataSheet.Cells[6, 2] = "East";
            dataSheet.Cells[6, 3] = 600;
            dataSheet.Cells[7, 1] = "Tablet";
            dataSheet.Cells[7, 2] = "West";
            dataSheet.Cells[7, 3] = 750;
            dataSheet.Cells[8, 1] = "Monitor";
            dataSheet.Cells[8, 2] = "North";
            dataSheet.Cells[8, 3] = 400;
            dataSheet.Cells[9, 1] = "Monitor";
            dataSheet.Cells[9, 2] = "South";
            dataSheet.Cells[9, 3] = 500;
            dataSheet.Cells[10, 1] = "Keyboard";
            dataSheet.Cells[10, 2] = "East";
            dataSheet.Cells[10, 3] = 300;
            // Create pivot cache from source data range
            Excel.Range dataRange = dataSheet.Range["A1:C10"];
            Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
                Excel.XlPivotTableSourceType.xlDatabase, dataRange);
            // Create PivotTable at specific location
            Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
            Excel.PivotTable pivotTable = pivotTables.Add(
                pivotCache, pivotSheet.Range["A3"], "SalesPivot");
            // Configure pivot table fields - row and column headers
            ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation =
                Excel.XlPivotFieldOrientation.xlRowField;
            ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation =
                Excel.XlPivotFieldOrientation.xlColumnField;
            ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation =
                Excel.XlPivotFieldOrientation.xlDataField;
            // Configure grand totals and formatting
            pivotTable.RowGrand = true;
            pivotTable.ColumnGrand = true;
            // Save the Excel file
            workbook.SaveAs("pivot_interop.xlsx");
            workbook.Close();
            excelApp.Quit();
            // Critical: Release COM objects to avoid errors
            #if WINDOWS
            Marshal.ReleaseComObject(pivotTable);
            Marshal.ReleaseComObject(pivotSheet);
            Marshal.ReleaseComObject(dataSheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excelApp);
            #endif
    }
}

이 코드는 Excel 애플리케이션을 생성하고, 헤더 행을 포함한 소스 데이터로 워크시트를 추가하며, 피벗 캐시를 설정하고, PivotTable 객체를 구축하며, 필드 방향을 구성합니다. 정리 섹션은 매우 중요합니다 - COM 객체를 해제하지 않으면 메모리 누수가 발생합니다. 각 셀, 범위 및 워크시트는 런타임 오류를 피하기 위해 적절히 처분해야 합니다.

IronXL 대안 접근 방식

IronXL은 Excel 파일 형식을 직접 처리하여 다른 접근 방식을 취합니다. 유사한 분석 결과를 프로그램적으로 달성하는 방법은 다음과 같습니다:

using IronXL;
using System.Linq;
class Program 
{
    static void Main(string[] args)
    {
        // Create workbook and add worksheet with data
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Data");
        // Add header row to define column structure
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Region";
        sheet["C1"].Value = "Sales";
        // Add sample data to cells
        sheet["A2"].Value = "Widget";
        sheet["B2"].Value = "North";
        sheet["C2"].Value = 1500;
        // ... continue to add more data rows
        sheet["A3"].Value = "Laptop";
        sheet["B3"].Value = "South";
        sheet["C3"].Value = 1500;
        sheet["A4"].Value = "Phone";
        sheet["B4"].Value = "North";
        sheet["C4"].Value = 800;
        sheet["A5"].Value = "Phone";
        sheet["B5"].Value = "South";
        sheet["C5"].Value = 950;
        sheet["A6"].Value = "Tablet";
        sheet["B6"].Value = "East";
        sheet["C6"].Value = 600;
        sheet["A7"].Value = "Tablet";
        sheet["B7"].Value = "West";
        sheet["C7"].Value = 750;
        sheet["A8"].Value = "Monitor";
        sheet["B8"].Value = "North";
        sheet["C8"].Value = 400;
        sheet["A9"].Value = "Monitor";
        sheet["B9"].Value = "South";
        sheet["C9"].Value = 500;
        sheet["A10"].Value = "Keyboard";
        sheet["B10"].Value = "East";
        sheet["C10"].Value = 300;
        // Create summary analysis worksheet
        var summarySheet = workbook.CreateWorkSheet("Summary");
        // Group and calculate aggregated data
        var data = sheet["A1:C10"].ToDataTable(true);
        var productSummary = data.AsEnumerable()
            .GroupBy(row => row.Field<string>("Product"))
            .Select((group, index) => new {
                Product = group.Key,
                TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
                Count = group.Count(),
                RowIndex = index + 2
            });
        // Write column headers for summary
        summarySheet["A1"].Value = "Product Summary";
        summarySheet["A2"].Value = "Product";
        summarySheet["B2"].Value = "Total Sales";
        summarySheet["C2"].Value = "Count";
        // Export results to cells
        foreach (var item in productSummary)
        {
            summarySheet[$"A{item.RowIndex + 1}"].Value = item.Product;
            summarySheet[$"B{item.RowIndex + 1}"].Value = item.TotalSales;
            summarySheet[$"C{item.RowIndex + 1}"].Value = item.Count;
        }
        // Apply number formatting and style
        summarySheet["B:B"].FormatString = "$#,##0.00";
        // Save the xlsx file
        workbook.SaveAs("analysis_ironxl.xlsx");
    }
}

이 IronXL 예제는 워크북을 생성하고, 워크시트를 추가하고, 데이터를 사용하여 셀을 채우며 집계 분석을 수행하는 방법을 보여줍니다. 코드는 제품별로 데이터를 그룹화하고, 합계와 카운트를 계산하여 요약 보고서를 작성합니다. COM 개체에 대한 관리가 필요하지 않으며, 메서드는 자동으로 메모리를 처리하는 간단한 .NET 컬렉션입니다.

산출

C#에서 Excel 피벗 테이블을 만드는 방법: 그림 6 - IronXL 출력

C#에서 Excel 피벗 테이블을 만드는 방법: 그림 7 - 요약 출력

주요 차이점 및 고려 사항

배포 요구사항

Excel Interop의 요구사항:

  • 유효한 라이선스가 있는 Microsoft Excel 설치

  • Windows 운영 체제

  • 적절한 COM 권한 및 설정

  • Office 자동화를 위한 서버 구성 IronXL의 요구사항:

  • IronXL 라이브러리 패키지만 필요

  • .NET을 지원하는 모든 플랫폼에서 작동

  • Office 설치나 라이선스 불필요

  • 간소화된 배포 과정

C#에서 Excel 피벗 테이블을 만드는 방법: 그림 8 - 기능

코드 품질 및 유지 보수

Interop에서는 메모리 누수 및 오류를 피하기 위해 COM 개체를 주의 깊게 관리해야 합니다. 생성된 모든 Excel 개체는 올바른 메서드를 사용하여 명시적으로 해제해야 합니다. IronXL은 자동 쓰레기 수집이 포함된 표준 .NET 개체를 사용하여 자원 문제의 위험을 줄입니다.

오류 처리

Interop과 관련된 오류는 종종 Excel 가용성, 버전 차이 또는 COM 실패와 관련이 있습니다. IronXL 오류는 표준 .NET 예외로, 디버그가 더 간단합니다. COM 관련 문제에 대해 걱정하지 않고 익숙한 try-catch 패턴에 의존할 수 있습니다.

모범 사례 및 권장 사항

Excel Interop을 선택하세요:

  • 모든 서식 옵션이 포함된 정확한 Excel 피벗 테이블 기능이 필요할 때

  • 시스템에서 Excel의 가용성이 보장될 때

  • Windows 데스크탑 애플리케이션에서만 작업할 때

  • 레거시 코드 요구사항이 있을 때 IronXL을 선택하세요:

  • 서버 애플리케이션이나 웹 솔루션을 빌드할 때

  • 플랫폼 간 호환성이 필요할 때

  • COM 오버헤드 없이 안정적인 성능이 필요할 때

  • 컨테이너나 클라우드 환경에 배포할 때

IronXL 문서를 방문하여 구현에 대한 자세한 내용을 알아보세요. 질문이나 지원이 필요하면 Iron Software 팀에 문의하세요.

결론

C# Interop은 Excel의 피벗 테이블 기능에 직접 접근할 수 있는 반면, 배포 제한과 복잡성을 수반합니다. IronXL은 .NET이 지원되는 어디서나 실행할 수 있는 유연성을 제공하면서 Excel 파일 조작을 단순화하는 현대적인 대안을 제공합니다.

새로운 애플리케이션을 구축하거나 기존 솔루션을 현대화하는 개발자에게 IronXL의 접근 방식은 COM Interop 부하를 제거하면서 강력한 데이터 조작 기능을 제공합니다. Excel 데이터를 읽고, 편집하고, 내보내야 할 때 IronXL은 더 깔끔한 솔루션을 제공합니다.

IronXL의 무료 체험판으로 차이를 경험하거나 튜토리얼을 탐색하여 더 많은 예제를 확인해보세요. 배포할 준비가 되셨나요? 라이선스 옵션 보기를 통해 작업에 맞는 패키지를 선택하세요.

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.