IRONSOFTWAREHOME
IRONXL KULLANARAK

IronXL Kullanarak C# ile Excel'de Pivot Tablo Nasıl Oluşturulur

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

Excel'de veri tablolarını programatik olarak oluşturmak, ya C# Interop ile Office bağımlılıklarıyla ya da bağımsız çalışan modern bir kütüphane olan IronXL ile mümkündür - bu kılavuz her iki yaklaşımı da gösterir ve modern yolun neden daha iyi bir seçim olduğunu açıkça gösterir.

Sunucu tarafı veya çapraz platform .NET kodunda pivot tarzı raporlar oluşturmak tarihsel olarak zahmetli olmuştur. Geleneksel COM Interop rotası, sizi tam bir Office yüklemesiyle bir Windows makinesine bağlar, tek bir COM temizleme çağrısını kaçırırsanız bellek sızıntıları üretir ve Linux veya bir Docker konteynerine dağıtmaya çalıştığınız anda çöker. Modern alternatif - IronXL ve LINQ ile toplama mantığı yazmak - .NET'in çalıştığı her yerde çalışır, ofis lisansı gerektirmez ve size temiz, okunabilir bir kod sunar.

Bu kılavuz her iki tekniği de ayrıntılı bir şekilde ele alır. Hammallığın Interop yaklaşımını görecek, onun ne kadar kırılgan olduğunu anlayacak ve ardından IronXL ile aynı pivot tarzı özet sayfasını C# içinde oluşturacaksınız. Ayrıca gerçek zamanlı, otomatik güncellemeli özetler oluşturmak için Excel formüllerini nasıl kullanacağınızı da göreceksiniz.

Excel Pivot Tablosu Nedir?

Bir pivot tablo, elektronik tablo yazılımının en güçlü analitik araçlarından biridir. Satırları gruplandırarak, değerleri toplayarak ve sonuçları çapraz tablolar halinde düzenleyerek büyük veri setlerini özetler – tüm bunları, tek bir formül bile manuel olarak yazmanızı gerektirmeden yapar. Microsoft'un resmi pivot tablo belgeleri, Excel içinde özelliğin ne yaptığını kapsamlı bir şekilde anlatmaktadır.

Pivot tablolar Microsoft Excel, Google Sheets, Apple Numbers ve çoğu diğer tablo araçlarında görülür. Ana konsept her zaman aynıdır: satır alanlarını, sütun alanlarını ve değer alanlarını tanımlarsınız ve araç sizin için bir özet matrisi oluşturur. Temel veriler değiştiğinde, pivot tabloyu yenilersiniz ve özet otomatik olarak güncellenir.

C# sunucu tarafı kodunda, iki geniş seçenek vardır:

  • C# Interop -- bir XLSX dosyasının içinde özgün bir yerel pivot tablo nesnesi oluşturmak için COM aracılığıyla çalışan bir Excel sürecini otomatikleştirir
  • IronXL ile LINQ toplama -- çalışma kitabını belleğe okur, aynı özeti yönetilen .NET kodunda hesaplar ve sonucu yeni bir çalışma sayfasına yazar

Her iki seçenek de kullanışlı bir çıktı üretir. Ama sadece biri modern dağıtım ortamlarında güvenilir bir şekilde çalışır.

C# Interop Kullanarak Pivot Tablosu Nasıl Oluşturulur?

C# Excel Interop, size COM otomasyonu aracılığıyla Excel'in yerel pivot tablo işlevselliğine doğrudan erişim sağlar. Bir Excel.Application nesnesi oluşturur, bir çalışma kitabını açar, bir veri aralığına işaret eden bir pivot önbellek tanımlar ve ardından satır alanlarını, sütun alanlarını ve veri alanlarını yapılandırırsınız.

Interop Pivot Tablo Kodunu Nasıl Kuracaksınız?

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;

// 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);

// 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);

Bu Interop örneği, sıralar olarak Ürün, sütunlar olarak Bölge ve veri alanında Toplam Satış ile özgün bir Excel pivot tablosu oluşturur. XLSX dosyasının içinde gerçek bir pivot tablo nesnesi üretse de, Microsoft Office'in yüklü olmasını gerektirir ve dikkatli COM nesne yönetimi talep eder. Tek bir Marshal.ReleaseComObject çağrısını kaçırırsanız, Görev Yöneticisi'nde biriken bayat Excel süreçlerini bulursunuz.

Kod Yazmaya Başlamadan Önce IronXL Nasıl Kurulur

IronXL yaklaşımına geçmeden önce, kütüphaneyi NuGet Paket Yöneticisi aracılığıyla kurun:

PM > Install-Package IronXL.Excel

Sunucuda, konteynerda veya geliştirme makinesinde Office kurulu olmasına gerek yoktur. IronXL, XLSX, XLS ve CSV dosyalarını tamamen yönetilen .NET belleğinde okur ve yazar.

C# Interop Hangi Problemleri Oluşturur?

Interop yaklaşımı, gerçek dünyada hızla bileşikleşen birkaç önemli zorluğu ortaya koyar. Stack Overflow ve diğer programlama kaynakları, birçok konu başlığının 2000'li yılların başında yazıldığından ve o zamandan beri kilitli olduğundan dolayı hala bunu önerir - bu nedenle tavsiyeler zaman içinde donmuş kalır.

Dağıtım bağımlılıkları -- kodunuzu çalıştıran her makineye lisanslı bir Microsoft Office kopyası kurulu olmalıdır; üretim sunucuları ve CI/CD yapım ajanları dahil. Bu hem lisanslama maliyeti hem de modern alternatiflerle tamamen kaçınılabilecek dağıtım karmaşıklığını ekler.

Bellek yönetimi yükü -- COM nesneleri Marshal.ReleaseComObject() kullanılarak açıkça serbest bırakılmalıdır. Tek bir nesnenin kaçırılması, Excel süreçlerinin bellek içerisinde süresiz bir şekilde takılı kalmasına neden olur, Stack Overflow'da geniş ölçüde belgelenmiştir. Uzun süre çalışan bir hizmet veya bir ASP.NET web uygulaması içinde, bu kritik bir kaynak sızıntısı haline gelir.

Platform kısıtlamaları -- Interop yalnızca Windows üzerinde, Office yüklüyken çalışır. Linux, macOS, Docker konteynerları veya Azure Functions ya da AWS Lambda gibi sunucusuz platformlarda çalıştıramazsınız. Bu, sizi tamamen modern bulut yerel mimarilerden engeller.

Performans darboğazları -- Bir Excel uygulaması örneği başlatmak yavaş ve kaynak yoğun bir işlemdir. Sunucu tarafı toplu işlemede, birden fazla rapor oluşturmanız gerektiğinde bu başlangıç yükü ciddi bir verimlilik kısıtına dönüşür.

Sürüm uyumluluğu kırılganlığı -- Farklı Office sürümleri hafifçe farklı COM arayüzleri sunar. Office 2019'a karşı çalışan bir kod, Office 2016 veya Microsoft 365'e karşı farklı davranabilir ve bir dağıtımda sürümü sabitlemenin bir yolu yoktur. Microsoft'un Office Interop montajları hakkındaki belgeleri bu sürümlendirme kısıtlamalarını bilinen bir sınırlama olarak not eder.

CI/CD uyumsuzluğu -- çoğu sürekli tümleşik ortamda Office yüklü değildir. Pivot tablo oluşturma kodunuzu test etmek, ya tüm COM katmanını taklit etmeyi ya da lisanslı bir Office kurulumu olan özel bir Windows ajanını sürdürmeyi gerektirir.

Hedef .NET 6 veya daha sonraki sürümler olan, .NET 10 dahil, yeni herhangi bir .NET uygulaması için bu kısıtlamalar Interop'u pratik bir seçim haline getirmez.

IronXL Interop Olmadan Nasıl Pivot Tablolar Oluşturur?

IronXL pivot tablo oluşturmayı farklı bir şekilde ele alır. COM aracılığıyla harici bir Excel sürecini kontrol etmek yerine, IronXL çalışma kitabınızı yönetilen .NET belleğine okur, size hücre değerlerine, formüllere ve çalışma sayfası yapısına doğrudan erişim sağlar. Daha sonra standart LINQ sorgularını kullanarak pivot tarzı toplamalar oluşturur ve sonuçları yeni bir çalışma sayfasına yazar.

IronXL ve LINQ ile Çapraz Tablo Özetini Nasıl Oluşturulur

Aşağıdaki örnek bir satış verisi çalışma kitabını yükler, ürün bazında bir bölge çapraz dökümü hesaplar ve özeti yeni bir çalışma sayfasına yazar - ofis bağımlılığı olmadan:

using IronXL;
using System.Linq;
using System.Data;

// Load Excel file -- no Office installation required
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet dataSheet = workbook.WorkSheets[0];

// Convert to DataTable for flexible LINQ manipulation
var dataTable = dataSheet.ToDataTable(true); // true = first row as column headers

// Build pivot-style aggregation using LINQ grouping
var pivotData = dataTable.AsEnumerable()
    .GroupBy(row => new {
        Product = row["Product"].ToString(),
        Region = row["Region"].ToString()
    })
    .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 the pivot report worksheet
WorkSheet pivotSheet = workbook.CreateWorkSheet("PivotReport");

// Get distinct row and column values
var products = pivotData.Select(p => p.Product).Distinct().OrderBy(p => p).ToList();
var regions  = pivotData.Select(p => p.Region).Distinct().OrderBy(r => r).ToList();

// Write column headers
pivotSheet["A1"].Value = "Product / Region";
for (int c = 0; c < regions.Count; c++)
{
    pivotSheet[$"{(char)('B' + c)}1"].Value = regions[c];
}

// Populate data rows
for (int r = 0; r < products.Count; r++)
{
    pivotSheet[$"A{r + 2}"].Value = products[r];
    for (int c = 0; c < regions.Count; c++)
    {
        var sales = pivotData
            .Where(p => p.Product == products[r] && p.Region == regions[c])
            .Select(p => p.TotalSales)
            .FirstOrDefault();
        pivotSheet[$"{(char)('B' + c)}{r + 2}"].Value = sales;
    }
}

// Add a totals row using Excel SUM formulas
int totalRow = products.Count + 2;
pivotSheet[$"A{totalRow}"].Value = "Total";
for (int c = 0; c < regions.Count; c++)
{
    char col = (char)('B' + c);
    pivotSheet[$"{col}{totalRow}"].Formula = $"=SUM({col}2:{col}{totalRow - 1})";
}

// Apply currency formatting to the data range
var dataRange = pivotSheet[$"B2:{(char)('B' + regions.Count - 1)}{totalRow}"];
dataRange.FormatString = "$#,##0.00";

workbook.SaveAs("PivotReport.xlsx");

Bu, yerel bir Excel pivot tablosundan elde edeceğiniz aynı çapraz döküm özetini üretir. Her hücre, formül ve format dizgisi üzerinde tam programatik kontrolünüz vardır ve temizlenmesi gereken COM nesneleri yoktur.

C# Interop ile IronXL kullanarak Excel'de Özet Tablo Nasıl Oluşturulur: Görsel 1 - Hücreleri gösteren oluşturulmuş Özet Tablo ile özgün Excel dosyası.

İlk Adım:
arrow pointer

Dinamik Özetler Excel Formülleri Kullanarak Nasıl Oluşturulur?

Özet sayfanın canlı kalmasını istediğiniz senaryolar için - temel veriler değiştiğinde otomatik olarak yeniden hesaplama - IronXL hücrelere doğrudan Excel formülü dizileri yazmanıza olanak tanır. Bu size, Interop bağımlılığı olmadan, pivot tablonun otomatik yenileme davranışına benzer bir davranış kazandırır.

Buradaki temel fonksiyonlar SUMIFS ve COUNTIFS. SUMIFS, birden fazla kriter sütunu koşuluna dayalı bir aralığı toplar; COUNTIFS eşleşen satırları sayar. Her iki fonksiyon da adlandırılmış çalışma sayfalarına referanslar kabul ettiğinden, özet sayfanızı doğrudan kaynak veriler sayfasını belirterek hedefleyebilirsiniz.

IronXL ile Formül Tabanlı Toplamalar Nasıl Yazılır

using IronXL;
using System.Data;

string inputPath  = "SalesData.xlsx";
string outputPath = "DynamicSummary.xlsx";

WorkBook workbook  = WorkBook.Load(inputPath);
WorkSheet dataSheet = workbook.WorkSheets[0];

// Name the data sheet so formula references are stable
dataSheet.Name = "DataSheet";

// Convert to DataTable to enumerate unique product/region combinations
DataTable dataTable = dataSheet.ToDataTable(true);

WorkSheet summarySheet = workbook.CreateWorkSheet("DynamicSummary");

// Get unique product-region pairs
var uniqueCombos = dataTable.AsEnumerable()
    .Select(row => new {
        Product = row["Product"].ToString(),
        Region  = row["Region"].ToString()
    })
    .Distinct()
    .OrderBy(x => x.Product)
    .ThenBy(x => x.Region)
    .ToList();

// Header row
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Region";
summarySheet["C1"].Value = "Total Sales";
summarySheet["D1"].Value = "Count";

// Populate rows with live SUMIFS / COUNTIFS formulas
for (int i = 0; i < uniqueCombos.Count; i++)
{
    int rowIndex = i + 2;
    var combo = uniqueCombos[i];

    summarySheet[$"A{rowIndex}"].Value = combo.Product;
    summarySheet[$"B{rowIndex}"].Value = combo.Region;

    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}\")";
}

// Grand total row
int totalRow = uniqueCombos.Count + 2;
summarySheet[$"A{totalRow}"].Value = "Total";
summarySheet[$"C{totalRow}"].Formula = $"=SUM(C2:C{totalRow - 1})";
summarySheet[$"D{totalRow}"].Formula = $"=SUM(D2:D{totalRow - 1})";

workbook.SaveAs(outputPath);

Bu formüller kaynak verilerle canlı bağlantıları korur. Birisi DataSheet içindeki bir değeri güncellediğinde, Excel bir sonraki açılışta veya yenilemede özeti otomatik olarak yeniden hesaplar -- size COM otomasyonu gerektirmeden, yerel bir pivot tablonun yenileme döngüsüyle aynı davranışı sağlar.

Önceki örnekte kullanıldığı aynı satış verileri çalışma kitabına bunu uyguladığınızda, çıktı şu şekilde görünür:

C# Interop ile IronXL kullanarak Excel'de Özet Tablo Nasıl Oluşturulur: Görsel 2 - Bağlamda gösterilen C# Dinamik özet çıktıları.

Bu formül tabanlı yaklaşım aynı zamanda IronXL'ın hücre biçimlendirme API'si kullanarak özet hücrelerine koşullu biçimlendirme, veri çubukları veya simge kümeleri eklemenize olanak tanır; raporlarınızı görsel olarak net hale getirir, Excel kullanıcı arayüzünde manuel bir çalışma olmaksızın.

Bu İki Yaklaşım Nasıl Karşılaştırılır?

Bir yaklaşım seçmeden önce, ticari .NET geliştirme için en önemli boyutları yan yana görmek yardımcı olabilir. Aşağıdaki tablo üretim .NET geliştirme için en önemli boyutları kapsar:

Pivot tablo oluşturma için C# Interop vs IronXL
BoyutC# InteropIronXL
Office gerekliEvet -- her makinede tam kurulumHayır -- bağımsız NuGet paketi
Platform desteğiSadece WindowsWindows, Linux, macOS, Docker
Bellek yönetimiManuel COM temizliği gerekliOtomatik .NET çöp koleksiyonu
Dağıtım karmaşıklığıYüksek -- Office lisanslaması + yüklemeDüşük -- tek DLL referansı
PerformansYavaş -- Excel süreci başlangıç yüküHızlı -- bellek içi hesaplamalar
Bulut uyumluHayır -- Azure Functions, AWS Lambda'da engellendiEvet -- herhangi bir bulut platformunda çalışır
Yerel pivot tablo nesnesiEvet -- tam Excel pivot tablosuHayır -- toplama tabanlı eşdeğer
Geliştirme hızıYavaş -- COM karmaşıklığıHızlı -- akıcı yönetilen API
.NET 10 desteğiSınırlı -- COM bağlanma sorunlarıTam -- modern .NET'i hedefler

Interop'un açık bir avantajının bulunduğu tek senaryo, XLSX dosyasında gömülü yerel Excel pivot tablo nesnesine özel olarak ihtiyacınız olduğunda -- örneğin, alt kullanıcıların Excel'in yerleşik pivot tablo kullanıcı arayüzünü kullanarak (detaylandırma, filtreleme, toplama işlevlerini etkileşimli olarak değiştirme) etkileşime girmeleri gerekiyorsa. Diğer tüm senaryolarda, IronXL'ın yöntemi yazılması daha hızlı, dağıtılması daha kolay ve çok daha taşınabilir.

Hangi Yaklaşımı Seçmelisiniz?

Doğru seçim, dağıtım ortamınıza ve kullanıcılarınızın ihtiyaçlarına bağlıdır.

C# Interop'u yalnızca şu durumlarda seçin:

  • Kullanıcılarınız yerel Excel pivot tablo nesnelerine ihtiyaç duyuyor ve Excel kullanıcı arayüzü içinde bunları etkileşimli olarak manipüle edebilecekler
  • Her makinede Office'in yüklü olduğundan emin olunan kapalı bir Windows masaüstü ortamını hedefliyorsunuz
  • Interop'a zaten bağımlı olan miras .NET Framework kodunu sürdürüyor ve bir yeniden yazma şu anda gerekçelendirilmiyor

IronXL seçin şu durumlarda:

  • Bir sunucuya, konteynere veya herhangi bir bulut ortamına (Azure, AWS, GCP) dağıtım yapıyorsunuz
  • Linux, macOS veya Docker tabanlı derlemeler için çapraz platform desteğine ihtiyacınız var
  • COM yaşam döngüsü yönetimi olmadan temiz, sürdürülebilir kod istiyorsunuz
  • .NET 5, 6, 7, 8, 9 veya 10 hedefliyorsunuz
  • Sunucu altyapısında Microsoft Office lisans ücretlerinden kaçınmak istiyorsunuz
  • Excel süreç başlangıcı başına hızlı toplu işleme ihtiyacınız var

Çoğu modern .NET uygulaması için, IronXL pratik bir seçimdir. Toplama tabanlı çıktı, tüm gerçek raporlama gereksinimlerini karşılar ve bunun karşılığında tam taşınabilirlik kazanırsınız.

IronXL belgelerinde ve IronXL örnekler kütüphanesinde hücre biçimlendirme, formül değerlendirme, veri doğrulama ve grafik oluşturma gibi daha fazla yeteneği keşfedebilirsiniz.

IronXL ile Bugün Nasıl Başlanır?

IronXL kütüphanesi NuGet üzerinde mevcuttur ve her türlü .NET projesine eklemek bir dakikadan az sürer:

PM > Install-Package IronXL.Excel

Kurulduktan sonra, mevcut bir çalışma kitabını yükleyebilir veya yeni bir tane oluşturabilir, hücre değerlerini okuyup yazabilir, formüller uygulayabilir, biçim dizgileri ayarlayabilir ve XLSX'e kaydedebilirsiniz - hepsi temiz, iyi belgelenmiş bir API ile. Hiçbir COM yok, Office bağımlılığı yok ve özel sunucu yapılandırması gerekli değil.

Tam API belgeleri için IronXL başlangıç rehberine, C# Excel Interop geçiş rehberine ve IronXL kod örneklerine bakınız. Ayrıca IronXL'yi diğer Excel kütüphaneleriyle, IronXL karşılaştırma makalelerinde karşılaştırabilirsiniz.

Bir ücretsiz deneme lisansı, tam işlevselliği kendi projenizde taahhütte bulunmadan önce test etmenizi sağlar. Üretime dağıtıma hazır olduğunuzda, bir ticari IronXL lisansı deneme filigranını kaldırır ve öncelikli destek içerir. Ücretsiz deneme ile başlayın ve çapraz platform Excel otomasyonunun ne kadar basit hale geldiğini görün.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez