푸터 콘텐츠로 바로가기
IRONXL 사용하여

C#에서 Excel 피벗 테이블을 만드는 방법은 무엇인가요?

C#에서 Excel 피벗 테이블을 만드는 것은 Office Interop(마이크로소프트 오피스 설치 필요) 또는 독립적으로 작동하는 최첨단 라이브러리인 IronXL로 가능합니다. IronXL은 향상된 배포 유연성과 DevOps 환경에 대한 크로스 플랫폼 지원을 제공합니다.

프로그래밍 방식으로 피벗 테이블을 생성하려면 Office 종속성을 갖춘 C# Interop 또는 개별적으로 작동하는 IronXL과 같은 최신 라이브러리가 필요합니다. 이 튜토리얼은 두 가지 접근 방식을 보여주며, 개발자들이 특히 Docker 컨테이너Azure, AWS와 같은 클라우드 환경에 배포할 때 전통적인 Interop 방법보다 IronXL을 점점 더 선택하는 이유를 강조합니다.

이 기사에서는 피벗 테이블과 그룹을 자동 분석 및 오류 처리 기능을 사용해 편집, 생성, 디자인 및 계산하는 방법을 배우며, DevOps 엔지니어가 요구하는 배포의 단순성을 유지할 수 있습니다.

Excel 피벗 테이블이란 무엇입니까?

피벗 테이블은 Excel의 가장 강력한 도구 중 하나입니다. .NET 응용 프로그램에서 데이터 분석을 하는 경우 크기가 큰 데이터 세트를 요약하는 쉬운 방법입니다. 피벗 테이블은 숫자 데이터를 쉽게 표시, 이해 및 분석할 수 있도록 합니다. 이들은 Excel뿐만 아니라 Google Sheets, Apple Numbers 및 CSV 내보내기와 같은 다른 프로그램에서도 사용할 수 있습니다. 이들은 데이터를 개요로 보는 솔루션을 제공하여 사람들이 정보를 의미 있게 볼 수 있는 데이터 콘솔로 작동합니다.

컨테이너화된 응용 프로그램의 경우, 프로그래밍 방식으로 피벗 테이블을 생성하면 Docker 이미지에서 Excel 설치가 필요 없게 되어 용기 크기와 배포 복잡성이 크게 줄어듭니다. 이 접근 방식은 현대적 CI/CD 파이프라인 및 컨테이너 배포 전략과 완벽히 일치합니다.

잘못된 방식으로 피벗 테이블을 만드는 방법을 탐색한 후 C#에서 올바른 방법을 배웁시다:

C# Interop을 사용하여 Excel 테이블에서 피벗 테이블을 생성하는 방법은 무엇입니까?

C# Excel Interop은 COM 자동화를 통해 Excel의 피벗 테이블 기능에 직접 액세스할 수 있게 해줍니다. C#에서 피벗 테이블을 생성할 도구를 찾을 때 많은 개발자가 찾는 전통적인 접근 방식은 다음과 같습니다.

이 접근 방식이 .NET에서 구시대적이라 여겨지는 이유는 무엇입니까?

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create Excel application instance
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Data\SalesData.xlsx");
Excel.Worksheet xlSheet = (Excel.Worksheet)xlWorkbook.Sheets[1];
Excel.Worksheet xlPivotSheet = (Excel.Worksheet)xlWorkbook.Sheets.Add();
// Define data range for pivot table
Excel.Range dataRange = xlSheet.UsedRange;
// Row area and column area 
// Create pivot cache and pivot table
Excel.PivotCache pivotCache = xlWorkbook.PivotCaches().Create(
    Excel.XlPivotTableSourceType.xlDatabase,
    dataRange,
    Type.Missing);
Excel.PivotTable pivotTable = pivotCache.CreatePivotTable(
    xlPivotSheet.Cells[3, 1],
    "SalesPivot",
    Type.Missing,
    Type.Missing); // fields by field
// Configure pivot table fields
Excel.PivotField productField = (Excel.PivotField)pivotTable.PivotFields("Product");
productField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
productField.Position = 1;
Excel.PivotField regionField = (Excel.PivotField)pivotTable.PivotFields("Region");
regionField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
regionField.Position = 1;
Excel.PivotField salesField = (Excel.PivotField)pivotTable.PivotFields("Sales");
pivotTable.AddDataField(salesField, "Sum of Sales", Excel.XlConsolidationFunction.xlSum);
// Save and cleanup
xlWorkbook.SaveAs(@"C:\Data\PivotReport.xlsx");
xlWorkbook.Close();
xlApp.Quit();
// Release COM objects to prevent memory leaks
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(xlPivotSheet);
Marshal.ReleaseComObject(xlSheet);
Marshal.ReleaseComObject(xlWorkbook);
Marshal.ReleaseComObject(xlApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create Excel application instance
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Data\SalesData.xlsx");
Excel.Worksheet xlSheet = (Excel.Worksheet)xlWorkbook.Sheets[1];
Excel.Worksheet xlPivotSheet = (Excel.Worksheet)xlWorkbook.Sheets.Add();
// Define data range for pivot table
Excel.Range dataRange = xlSheet.UsedRange;
// Row area and column area 
// Create pivot cache and pivot table
Excel.PivotCache pivotCache = xlWorkbook.PivotCaches().Create(
    Excel.XlPivotTableSourceType.xlDatabase,
    dataRange,
    Type.Missing);
Excel.PivotTable pivotTable = pivotCache.CreatePivotTable(
    xlPivotSheet.Cells[3, 1],
    "SalesPivot",
    Type.Missing,
    Type.Missing); // fields by field
// Configure pivot table fields
Excel.PivotField productField = (Excel.PivotField)pivotTable.PivotFields("Product");
productField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
productField.Position = 1;
Excel.PivotField regionField = (Excel.PivotField)pivotTable.PivotFields("Region");
regionField.Orientation = Excel.XlPivotFieldOrientation.xlColumnField;
regionField.Position = 1;
Excel.PivotField salesField = (Excel.PivotField)pivotTable.PivotFields("Sales");
pivotTable.AddDataField(salesField, "Sum of Sales", Excel.XlConsolidationFunction.xlSum);
// Save and cleanup
xlWorkbook.SaveAs(@"C:\Data\PivotReport.xlsx");
xlWorkbook.Close();
xlApp.Quit();
// Release COM objects to prevent memory leaks
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(xlPivotSheet);
Marshal.ReleaseComObject(xlSheet);
Marshal.ReleaseComObject(xlWorkbook);
Marshal.ReleaseComObject(xlApp);
$vbLabelText   $csharpLabel

이 Interop 예제는 데이터 영역에서 판매가 요약되고 제품이 행, 지역이 열로 있는 네이티브 Excel 피벗 테이블을 만듭니다. 기능적이긴 하나, 이 접근 방식은 Microsoft Office 설치 및 신중한 COM 개체 관리가 필요합니다. Microsoft 문서는 이 접근 방식이 현대적이지 않은 이유를 설명합니다. DevOps 관점에서 이 접근법은 특히 문제가 되며 효과적으로 컨테이너화할 수 없습니다 - 리눅스 Docker 컨테이너에 마이크로소프트 오피스를 설치하거나 서버리스 환경에 배포할 수 없습니다.

C# Interop이 일으키는 문제는 무엇입니까?

Interop 접근법은 현대 DevOps 관행과 클라우드 네이티브 배포에 부적합하게 만드는 여러 중대한 문제를 제시합니다.

불행히도, Stack Overflow 및 기타 프로그래밍 웹사이트는 2000년대 초반의 스레드와 관련이 있어 그것을 계속 추천하고 있습니다.

배포 종속성: 소스 코드를 실행하는 모든 컴퓨터, 포함하여 프로덕션 서버에 Microsoft Office 설치 필요합니다. 이는 라이선스 비용과 배포 복잡성을 추가합니다.

메모리 관리: COM 객체는 Marshal.ReleaseComObject()를 사용하여 명시적으로 해제해야 합니다. 심지어 하나의 객체라도 누락되면 Excel 프로세스가 메모리에 남아서 Stack Overflow에 광범위하게 문서화된 것처럼 작동 중단을 일으킵니다. 피벗 캐시를 고려하십시오.

플랫폼 제한: 이 솔루션은 Windows에서만 Office가 설치되어 있어야 작동합니다. 이는 믿을 수 없을 만큼 느리고 메모리 누수를 일으킬 수 있습니다. Linux, macOS, Docker 컨테이너 또는 Azure Functions와 같은 클라우드 플랫폼에 대한 지원이 없습니다. 이는 배포 옵션을 심각하게 제한하며 현대의 컨테이너 오케스트레이션 플랫폼 사용을 방해합니다.

성능 문제: Excel 애플리케이션 인스턴스를 시작하는 것은 느리고 리소스를 많이 소모하며, 특히 서버 측 처리에 적합하지 않습니다.

버전 호환성: Office의 다양한 버전은 각각 다른 COM 인터페이스를 가질 수 있으며, 환경 간의 호환성 문제를 일으킬 수 있습니다.

IronXL이 Interop 없이 피벗 테이블을 프로그래밍 방식으로 생성하는 방법은?

IronXL은 COM 의존성 없이 관리 코드를 사용하여 피벗 테이블을 생성하는 다른 접근 방식을 택합니다. 비록 본래의 Excel 피벗 테이블을 생성하지는 않지만, 이는 컨테이너화된 배포 및 클라우드 네이티브 아키텍처에 최적화된 강력한 집계 기능을 제공합니다. 이 라이브러리의 성능 최적화에는 40배의 속도 향상과 19.5GB에서 1GB 미만으로 메모리 사용량 감소를 포함하여, 리소스가 제한된 컨테이너 환경에 이상적입니다.

XLSX 또는 XLS 파일에 대해 이 접근 방식이 현대적인 이유는?

using IronXL;
using System.Linq;
using System.Data; // Keep this namespace
using static System.Data.DataTableExtensions; // Use 'using static' for DataTableExtensions
class Program
{
    static void Main(string[] args)
    {
        // Load Excel file - no Office required
        WorkBook workbook = WorkBook.Load("SalesData.xlsx");
        WorkSheet dataSheet = workbook.WorkSheets[0];
        // Convert to DataTable for powerful manipulation
        var dataTable = dataSheet.ToDataTable(true); // true = use first row as column headers
        // Create pivot-style aggregation using LINQ
        var pivotData = dataTable.AsEnumerable()
            .GroupBy(row => new {
                Product = row["Product"].ToString(),
                Region = row["Region"].ToString()
            }) //range
            .Select(g => new {
                Product = g.Key.Product,
                Region = g.Key.Region,
                TotalSales = g.Sum(row => Convert.ToDecimal(row["Sales"])),
                AverageSale = g.Average(row => Convert.ToDecimal(row["Sales"])),
                Count = g.Count()
            }); 
        // Create pivot report worksheet
        WorkSheet pivotSheet = workbook.CreateWorkSheet("PivotReport");
        // Build cross-tabulation structure
        var products = pivotData.Select(p => p.Product).Distinct().OrderBy(p => p);
        var regions = pivotData.Select(p => p.Region).Distinct().OrderBy(r => r);
        // Create headers
        pivotSheet["A1"].Value = "Product/Region";
        int col = 2;
        foreach (var region in regions)
        {
            pivotSheet[$"{(char)('A' + col - 1)}1"].Value = region; // string  
            col++;
        }
        // Populate pivot data
        int row = 2;
        foreach (var product in products)
        {
            pivotSheet[$"A{row}"].Value = product;
            col = 2;
            foreach (var region in regions)
            {
                var sales = pivotData
                    .Where(p => p.Product == product && p.Region == region)
                    .Select(p => p.TotalSales)
                    .FirstOrDefault();
                pivotSheet[$"{(char)('A' + col - 1)}{row}"].Value = sales;
                col++;
            }
            row++;
        }
        // Add totals using Excel formulas
        pivotSheet[$"A{row}"].Value = "Total"; // grand totals
        for (int c = 2; c <= regions.Count() + 1; c++)
        {
            pivotSheet[$"{(char)('A' + c - 1)}{row}"].Formula = $"=SUM({(char)('A' + c - 1)}2:{(char)('A' + c - 1)}{row - 1})";
        }
        // Proceeding to apply formatting
        var dataRange = pivotSheet[$"B2:{(char)('A' + regions.Count())}{row}"];
        dataRange.FormatString = "$#,##0.00";
        workbook.SaveAs("PivotReport.xlsx");
    }
}
using IronXL;
using System.Linq;
using System.Data; // Keep this namespace
using static System.Data.DataTableExtensions; // Use 'using static' for DataTableExtensions
class Program
{
    static void Main(string[] args)
    {
        // Load Excel file - no Office required
        WorkBook workbook = WorkBook.Load("SalesData.xlsx");
        WorkSheet dataSheet = workbook.WorkSheets[0];
        // Convert to DataTable for powerful manipulation
        var dataTable = dataSheet.ToDataTable(true); // true = use first row as column headers
        // Create pivot-style aggregation using LINQ
        var pivotData = dataTable.AsEnumerable()
            .GroupBy(row => new {
                Product = row["Product"].ToString(),
                Region = row["Region"].ToString()
            }) //range
            .Select(g => new {
                Product = g.Key.Product,
                Region = g.Key.Region,
                TotalSales = g.Sum(row => Convert.ToDecimal(row["Sales"])),
                AverageSale = g.Average(row => Convert.ToDecimal(row["Sales"])),
                Count = g.Count()
            }); 
        // Create pivot report worksheet
        WorkSheet pivotSheet = workbook.CreateWorkSheet("PivotReport");
        // Build cross-tabulation structure
        var products = pivotData.Select(p => p.Product).Distinct().OrderBy(p => p);
        var regions = pivotData.Select(p => p.Region).Distinct().OrderBy(r => r);
        // Create headers
        pivotSheet["A1"].Value = "Product/Region";
        int col = 2;
        foreach (var region in regions)
        {
            pivotSheet[$"{(char)('A' + col - 1)}1"].Value = region; // string  
            col++;
        }
        // Populate pivot data
        int row = 2;
        foreach (var product in products)
        {
            pivotSheet[$"A{row}"].Value = product;
            col = 2;
            foreach (var region in regions)
            {
                var sales = pivotData
                    .Where(p => p.Product == product && p.Region == region)
                    .Select(p => p.TotalSales)
                    .FirstOrDefault();
                pivotSheet[$"{(char)('A' + col - 1)}{row}"].Value = sales;
                col++;
            }
            row++;
        }
        // Add totals using Excel formulas
        pivotSheet[$"A{row}"].Value = "Total"; // grand totals
        for (int c = 2; c <= regions.Count() + 1; c++)
        {
            pivotSheet[$"{(char)('A' + c - 1)}{row}"].Formula = $"=SUM({(char)('A' + c - 1)}2:{(char)('A' + c - 1)}{row - 1})";
        }
        // Proceeding to apply formatting
        var dataRange = pivotSheet[$"B2:{(char)('A' + regions.Count())}{row}"];
        dataRange.FormatString = "$#,##0.00";
        workbook.SaveAs("PivotReport.xlsx");
    }
}
$vbLabelText   $csharpLabel

이것이 컨테이너 친화적인 방식으로 피벗 테이블을 생성하는 방법입니다. 이 접근 방식은 외부 종속성 없이 Docker 컨테이너, Kubernetes 포드 및 서버리스 함수에서 매끄럽게 작동합니다. 전체 애플리케이션은 .NET이 지원되는 어디에서나 실행되는 경량 컨테이너 이미지로 패키지화될 수 있습니다.

피벗 테이블 출력은 어떻게 보이나요?

원본 Excel 판매 데이터와 제품 판매가 지역별로 집계된 피벗 테이블을 비교하여 총계를 보여줍니다

출력은 IronXL이 Excel 설치 없이 원시 판매 데이터를 구조화된 피벗 보고서로 변환하는 방법을 보여주며, 이는 CI/CD 파이프라인의 자동화 보고에 완벽합니다.

IronXL 수식을 사용하여 동적 요약을 생성하는 방법?

피벗 테이블 새로 고침 기능과 유사한 동적 업데이트가 필요한 시나리오에서는 IronXL이 Excel의 내장 수식을 활용할 수 있습니다. 이 접근 방식은 선호됩니다 - 데이터가 훨씬 더 현대적이고 우아한 방식으로 처리됩니다. 코드는 지원에 문의하거나 매뉴얼을 읽을 필요 없이 이해하고 설정하기 쉽습니다. 이 접근 방식은 자동으로 업데이트되는 수식 기반 계산이 필요한 컨테이너화된 환경에서 특히 가치가 있습니다.

수식 기반 요약은 자동으로 어떻게 업데이트 될까요?

// Load the workbook
WorkBook workbook = WorkBook.Load(inputPath);
// Rename the first worksheet so formulas reference correctly
WorkSheet dataSheet = workbook.WorkSheets[0];
dataSheet.Name = "DataSheet";
// Convert worksheet to DataTable
DataTable dataTable = dataSheet.ToDataTable(true);
// Create new summary worksheet
WorkSheet summarySheet = workbook.CreateWorkSheet("DynamicSummary");
// Get unique product-region combinations
var uniqueCombos = dataTable.AsEnumerable()
    .Select(row => new {
        Product = row["Product"].ToString(),
        Region = row["Region"].ToString()
    })
    .Distinct()
    .OrderBy(x => x.Product)
    .ThenBy(x => x.Region);
// Add header row
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Region";
summarySheet["C1"].Value = "Total Sales";
summarySheet["D1"].Value = "Count";
// Populate rows with formulas
int rowIndex = 2;
foreach (var combo in uniqueCombos)
{
    summarySheet[$"A{rowIndex}"].Value = combo.Product;
    summarySheet[$"B{rowIndex}"].Value = combo.Region;
    // Adjust column references if your Sales column is C (not D)
    summarySheet[$"C{rowIndex}"].Formula =
        $"=SUMIFS(DataSheet!C:C,DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";
    summarySheet[$"D{rowIndex}"].Formula =
        $"=COUNTIFS(DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";
    rowIndex++;
}
// Optional: add total row
summarySheet[$"A{rowIndex}"].Value = "Total";
summarySheet[$"C{rowIndex}"].Formula = $"=SUM(C2:C{rowIndex - 1})";
summarySheet[$"D{rowIndex}"].Formula = $"=SUM(D2:D{rowIndex - 1})";
// Save output file
workbook.SaveAs(outputPath);  //filename
// Load the workbook
WorkBook workbook = WorkBook.Load(inputPath);
// Rename the first worksheet so formulas reference correctly
WorkSheet dataSheet = workbook.WorkSheets[0];
dataSheet.Name = "DataSheet";
// Convert worksheet to DataTable
DataTable dataTable = dataSheet.ToDataTable(true);
// Create new summary worksheet
WorkSheet summarySheet = workbook.CreateWorkSheet("DynamicSummary");
// Get unique product-region combinations
var uniqueCombos = dataTable.AsEnumerable()
    .Select(row => new {
        Product = row["Product"].ToString(),
        Region = row["Region"].ToString()
    })
    .Distinct()
    .OrderBy(x => x.Product)
    .ThenBy(x => x.Region);
// Add header row
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Region";
summarySheet["C1"].Value = "Total Sales";
summarySheet["D1"].Value = "Count";
// Populate rows with formulas
int rowIndex = 2;
foreach (var combo in uniqueCombos)
{
    summarySheet[$"A{rowIndex}"].Value = combo.Product;
    summarySheet[$"B{rowIndex}"].Value = combo.Region;
    // Adjust column references if your Sales column is C (not D)
    summarySheet[$"C{rowIndex}"].Formula =
        $"=SUMIFS(DataSheet!C:C,DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";
    summarySheet[$"D{rowIndex}"].Formula =
        $"=COUNTIFS(DataSheet!A:A,\"{combo.Product}\",DataSheet!B:B,\"{combo.Region}\")";
    rowIndex++;
}
// Optional: add total row
summarySheet[$"A{rowIndex}"].Value = "Total";
summarySheet[$"C{rowIndex}"].Formula = $"=SUM(C2:C{rowIndex - 1})";
summarySheet[$"D{rowIndex}"].Formula = $"=SUM(D2:D{rowIndex - 1})";
// Save output file
workbook.SaveAs(outputPath);  //filename
$vbLabelText   $csharpLabel

이 수식은 원본 데이터 시트가 변경될 때 자동으로 업데이트되며, Interop 의존성 없이도 피벗 테이블 새로 고침 동작과 유사합니다. 이 접근 방식은 외부 종속성 없이 동적 보고서를 생성해야 하는 컨테이너화된 마이크로서비스에 이상적입니다.

동적 요약에서 어떤 결과를 기대할 수 있나요?

이 코드를 이전 예의 예제 Excel 파일에 적용하면 다음과 같은 출력이 나타납니다.

제품(노트북, 폰, 태블릿)이 지역별로 총계와 수량이 계산된 동적 요약 공식을 보여주는 Excel 스프레드시트

동적 요약 접근 방식은 원본 데이터 변경 시 자동으로 업데이트되는 실시간 계산을 제공하며, 이는 컨테이너화된 환경에서 자동화 된 보고 파이프라인에 완벽합니다. 이는 일정한 피벗 테이블 새로 고침의 필요성을 없애고, .NET MAUIBlazor 애플리케이션에서 매끄럽게 작동합니다.

C# Interop과 IronXL의 피벗 테이블 비교는 어떻게 해야 할까요?

측면

C# Interop

IronXL

Office 필수

예 - 전체 설치

아니오 - 독립 실행형 라이브러리

플랫폼 지원

Windows 전용

윈도우, 리눅스, macOS, Docker

메모리 관리

수동 COM 정리가 필요함

자동 .NET 가비지 수집

전개

복잡함 - Office 라이선스

단순함 - 단일 DLL

성능

느림 - Excel 프로세스 시작

빠름 - 메모리 내 계산

클라우드 호환

아니오 - Azure 제한

예 - Azure Functions 지원

네이티브 피벗 테이블

아니오 - 집계 대안

개발 속도

느림 - COM 복잡성

빠름 - 직관적인 API

컨테이너 지원

아니요 - Office를 컨테이너화할 수 없음

예 - Docker 준비 완료

건강 점검

어려움 - COM 프로세스 모니터링

쉬움 - 표준 .NET 모니터링

DevOps 관점에서 IronXL의 아키텍처는 현대적인 배포 시나리오에서 상당한 이점을 제공합니다. 외부 의존성 없이 컨테이너에서 실행할 수 있는 라이브러리 덕분에 빠르게 배포하고 효율적으로 확장할 수 있는 경량 Docker 이미지를 만들 수 있습니다. 표준 .NET 패턴을 사용하여 헬스 체크를 구현할 수 있으며, 라이브러리의 보안 기능DigiCert 인증을 포함하고 COM 인터페이스가 없어 공격 벡터를 줄입니다.

어떤 접근 방식을 선택해야 하나요?

C# Interop을 언제 사용해야 하나요?

C# Interop을 선택할 때:

  • 네이티브 Excel 피벗 테이블 객체가 절대적으로 필요할 때
  • Office가 설치된 Windows에서 독점적으로 작업할 때
  • 관리하는 데스크톱 시스템에만 배포할 때
  • 기존 레거시 코드가 Interop에 의존할 때
  • 레거시 .NET Framework 버전을 사용할 때
  • 컨테이너화하거나 클라우드로 이동할 계획이 없을 때

IronXL이 더 나은 결과를 제공할 때는 언제인가요?

IronXL을 선택할 때:

  • 서버 또는 클라우드 환경(Azure, AWS)에 배포할 때
  • 컨테이너에서 실행되는 크로스 플랫폼 애플리케이션을 빌드할 때
  • 40배 빠른 성능 향상이 필요할 때
  • Office 라이선스 비용과 배포 복잡성을 피하고 싶을 때
  • 자동 라이센스 키 관리로 더 간단한 코드가 필요할 때
  • Mac, iOS, Android 및 Linux 시스템을 지원할 때
  • 최신 .NET Core 및 .NET 5-10에서 작업할 때
  • 피벗 테이블 필드를 프로그래밍 방식으로 구성할 때
  • 다양한 포맷으로 내보내는 마이크로서비스를 빌드할 때
  • CI/CD 파이프라인에서 자동 보고를 구현할 때
  • 컨테이너 오케스트레이션을 위한 건강 체크 엔드포인트를 만들 때
  • 다른 스프레드시트 포맷 간 변환

C#에서 피벗 테이블을 만드는 것에 대해 무엇을 배웠습니까?

C# Excel Interop은 네이티브 피벗 테이블을 만들 수 있지만, 배포 제한과 복잡성 때문에 특히 컨테이너화된 환경에서 현대적인 애플리케이션에는 점점 비실용적입니다. IronXL은 데이터 집계 및 공식 기반 요약을 통해 강력한 대안을 제공하며, Office 의존성 없이 분석 기능을 유지합니다.

Interop 없이 피벗 테이블을 개발하고자 하는 개발자와 DevOps 엔지니어에게 IronXL은 COM 복잡성을 피하고 모든 플랫폼에서 작동하며 배포를 단순화하는 우수한 경로를 제공합니다. 네이티브 피벗 객체가 없는 트레이드오프는 더 큰 유연성, 더 나은 성능 및 Office 라이선싱 요건의 제거로 상쇄됩니다. DevOps 팀에게 가장 중요한 것은 IronXL이 컨테이너화된 배포, 자동 확장, 최신 CI/CD 파이프라인과의 원활한 통합으로 진정한 코드로서의 인프라를 가능하게 한다는 것입니다.

라이브러리의 종합적인 기능 세트에는 조건부 서식, 셀 스타일링, 공식 지원, 그리고 데이터 유효성 검사가 포함되어 있어, 현대 .NET 애플리케이션의 Excel 자동화를 위한 완전한 솔루션을 제공합니다. CSV 파일로 작업하든, 워크시트를 관리하든, 복잡한 데이터 변환을 구현하든, IronXL은 일관되고, 배포에 친화적인 API를 제공합니다.

지금 바로 IronXL으로 시작하세요.
green arrow pointer

Excel 자동화를 현대화하고 현대 C#에서 피벗 테이블 코드를 작성할 준비가 되셨습니까?

IronXL은 NuGet 패키지 관리자를 통해 몇 초 만에 귀하의 C# 애플리케이션에 구현될 수 있습니다. 무료 체험판을 시도해 생산 애플리케이션에서 Interop 의존성을 제거하고 컨테이너 배포를 단순화하십시오.

자주 묻는 질문

엑셀에서 피벗 테이블이란 무엇인가요?

엑셀의 피벗 테이블은 데이터를 요약, 분석, 탐색 및 시각화하는 데 사용되는 강력한 도구입니다. 사용자는 피벗 테이블을 통해 열을 행으로, 행을 열로 변환할 수 있어 동적인 데이터 분석이 가능합니다.

C#에서 Excel 피벗 테이블을 만들 때 IronXL 사용해야 하는 이유는 무엇일까요?

IronXL 사용하면 개발자는 Office Interop에 의존하지 않고 C#에서 Excel 피벗 테이블을 만들 수 있으므로 Excel 설치가 필요 없고 종속성이 줄어들어 현대적이고 효율적인 선택이 됩니다.

IronXL Excel 작업에서 C# Interop과 어떻게 비교됩니까?

IronXL C# Interop에 비해 더욱 간소화되고 독립적인 접근 방식을 제공합니다. C# Interop은 Office 설치를 필요로 하지 않습니다. IronXL 사용하면 Interop의 복잡성 없이 피벗 테이블 및 기타 Excel 작업을 간편하게 생성할 수 있습니다.

엑셀이 설치되어 있지 않아도 피벗 테이블을 만들 수 있나요?

네, IronXL 사용하면 Microsoft Office와 독립적으로 작동하므로 Excel이 설치되어 있지 않아도 C# 애플리케이션에서 피벗 테이블을 생성할 수 있습니다.

IronXL 대규모 데이터 세트에 적합한가요?

IronXL 은 대규모 데이터 세트를 효율적으로 처리하도록 설계되어 강력한 데이터 조작 및 피벗 테이블 생성이 필요한 애플리케이션에 적합합니다.

기존 방식에 비해 IronXL 사용하는 것의 장점은 무엇인가요?

IronXL C# Interop과 같은 기존 방식에 대한 현대적이고 종속성이 없는 대안을 제공하여 사용 편의성, 유연성 및 복잡한 데이터 작업을 지원하며 Excel을 설치할 필요가 없습니다.

IronXL 사용하여 피벗 테이블을 만들려면 VBA를 배워야 하나요?

아니요, IronXL 사용하면 개발자가 C# 내에서 직접 피벗 테이블을 생성하고 관리할 수 있으므로 VBA 또는 기타 Excel 전용 프로그래밍 언어를 배울 필요가 없습니다.

커티스 차우
기술 문서 작성자

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

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me