IRONSOFTWAREHOME
IRONXL KULLANARAK

C# ile Interop Kullanılmadan Excel'de Pivot Tablolar Nasıl Oluşturulur

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

Excel Interop ile C# kullanarak Excel'de pivot tablo oluşturmak, her makinede Office gerektirirken, IronXL .NET'in çalıştığı her yerde çalışır. Bu kılavuz, her iki yaklaşımı da kapsayan eksiksiz örneklerle, kurulum, veri toplama, alan yapılandırması ve dağıtım hususlarını ele alarak projeniz için doğru kararı vermenizi sağlar.

C# Interop ile IronXL kullanarak Excel'de Pivot Tablo Nasıl Oluşturulur: Resim 1 - IronXL

Excel Interop ve IronXL Arasındaki Fark Nedir?

Tek bir kod satırı yazmadan önce, her yaklaşımın kaput altında neler yaptığını anlamak faydalıdır. Excel Interop, C#'tan Microsoft Excel'i doğrudan yönlendirmek için COM (Bileşen Nesne Modeli) kullanır. .NET süreci, çalışan bir Excel örneği ile iletişim kurar, bu da Excel'in makinede kurulu olması gerektiği anlamına gelir. Manipüle ettiğiniz her nesne -- çalışma kitapları, çalışma sayfaları, aralıklar, pivot önbellekler -- bir COM sarıcıdır ve bunlar bırakılmadıkça süreç sızıntıları önlenemez.

IronXL, temelde farklı bir yol izler. Excel'i hiç başlatmadan, Open XML dosya formatını doğrudan okur ve yazar. Sonuç, tanıdık nesne kalıpları ve çöp toplama belleği ile standart bir .NET kütüphanesidir, Office kurulumu veya lisanslama bağımlılığı olmadan. Bu mimari, IronXL'ı sunucu tarafı iş yükleri, Docker konteynerleri, Linux ana bilgisayarları ve herhangi bir .NET 6, .NET 8 veya .NET 10 ortamı için uygun kılar.

Excel Interop vs IronXL - hızlıca bir bakış
KriterlerExcel InteropIronXL
Office gerekliEvetHayır
Sadece WindowsEvetHayır – çapraz platform
Bellek yönetimiManuel COM bırakmaOtomatik (.NET GC)
Sunucu dağıtımıZorBasit
Yerel pivot tabloTam Excel pivot API'siLINQ aracılığıyla veri toplama
Lisans gerekiyorOffice lisansıYalnızca IronXL lisansı

C# Interop ile IronXL kullanarak Excel'de Pivot Tablo Nasıl Oluşturulur: Resim 2 - Çapraz Platform

Her Kütüphane Nasıl Kurulur?

Excel Interop Kurulumu

Excel Interop, NuGet paketi olarak gelir. Projenizde aşağıdakilerden birini çalıştırın:

Install-Package Microsoft.Office.Interop.Excel
dotnet add package Microsoft.Office.Interop.Excel
SHELL

Paketin tek başına yeterli olmadığını unutmayın – hedef makinenin doğru lisanslanmış bir Microsoft Excel sürümü kurulu olmalıdır. Bu bağımlılık, çoğu sunucu, konteyner ve bulut senaryolarında dışarıda bırakır.

C# Interop ile IronXL kullanarak Excel'de Pivot Tablo Nasıl Oluşturulur: Resim 3 - Excel Interop Kurulumu

IronXL Kurulumu Yapma

IronXL'ı NuGet aracılığıyla yükleyin, ek sistemi gereksinimleri olmadan:

PM > Install-Package IronXL.Excel

Kurulumdan sonra, .NET'i destekleyen herhangi bir platformda hemen Excel dosyalarını okumaya ve yazmaya başlayabilirsiniz. Hiçbir Office lisansı, COM kaydı, sunucu yapılandırması gerekmemektedir. IronXL kurulum kılavuzuna bakın, çevrimdışı kurulum ve proje referans ayarlama dahil olmak üzere ek seçenekler için.

C# Interop ile IronXL kullanarak Excel'de Pivot Tablo Nasıl Oluşturulur: Resim 4 - Kurulum

İlk Adım:
arrow pointer

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

Interop pivot tablo iş akışı sıkı bir sıra izler: bir kaynak aralıktan pivot önbellek oluşturun, ardından PivotTable nesnesini ayrı bir çalışma sayfasında oluşturun, ardından alan yönlendirmelerini yapılandırın. Aşağıdaki örnek, .NET 10 ile uyumlu üst düzey C# ifadelerini kullanır:

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

// Launch Excel and set up workbooks
var excelApp = new Excel.Application();
excelApp.Visible = false;
var workbook = excelApp.Workbooks.Add();
var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
dataSheet.Name = "SalesData";
var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
pivotSheet.Name = "Pivot";

// Populate header row
dataSheet.Cells[1, 1] = "Product";
dataSheet.Cells[1, 2] = "Region";
dataSheet.Cells[1, 3] = "Sales";

// Add sample data rows
object[,] rows = {
    { "Laptop",   "Hayırrth", 1200 },
    { "Laptop",   "South", 1500 },
    { "Phone",    "Hayırrth",  800 },
    { "Phone",    "South",  950 },
    { "Tablet",   "East",   600 },
    { "Tablet",   "West",   750 },
    { "Monitor",  "Hayırrth",  400 },
    { "Monitor",  "South",  500 },
    { "Keyboard", "East",   300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
    dataSheet.Cells[i + 2, 1] = rows[i, 0];
    dataSheet.Cells[i + 2, 2] = rows[i, 1];
    dataSheet.Cells[i + 2, 3] = rows[i, 2];
}

// Build pivot cache from source range
Excel.Range dataRange = dataSheet.Range["A1:C10"];
Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
    Excel.XlPivotTableSourceType.xlDatabase, dataRange);

// Create the PivotTable on the pivot sheet
Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
Excel.PivotTable pivotTable = pivotTables.Add(
    pivotCache, pivotSheet.Range["A3"], "SalesPivot");

// Assign field orientations
((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;

// Enable grand totals
pivotTable.RowGrand = true;
pivotTable.ColumnGrand = true;

// Save and close
workbook.SaveAs(@"C:\output\pivot_interop.xlsx");
workbook.Close(false);
excelApp.Quit();

// Release every COM object -- skipping any of these causes Excel to stay in memory
Marshal.ReleaseComObject(pivotTable);
Marshal.ReleaseComObject(pivotTables);
Marshal.ReleaseComObject(pivotCache);
Marshal.ReleaseComObject(dataRange);
Marshal.ReleaseComObject(pivotSheet);
Marshal.ReleaseComObject(dataSheet);
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(excelApp);

Her COM sarmalayıcı, eşleşen bir Marshal.ReleaseComObject çağrısı gerektirir. Bir referansın bile eksikliği, Excel sürecinin arka planda devam etmesine neden olur, bellek ve dosya tanıtıcılarını tüketir ve sunucu işlemi sona erene kadar devam eder. Bu temizlik yükü elektronik tablo işlemlerinizin karmaşıklığı ile orantılı olarak ölçeklenir.

Aynı Sonucu IronXL ile Nasıl Elde Edersiniz?

IronXL, Interop'un yaptığı gibi yerel bir pivot tablo API'yi açığa çıkarmaz -- Open XML pivot formatı yüzlerce XML özelliğine sahiptir ve çoğu iş gereksinimi, standart C# ile yazılmış açık LINQ toplama ile daha güvenilir bir şekilde karşılanır. Çıktı, dosya açıldığında doğru bir şekilde yeniden hesaplayan temiz bir özet sayfasıdır, pivot önbellek yenilemek için Excel'e bağımlı olmadan.

using IronXL;
using System.Data;

// Create workbook and populate source data
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet dataSheet = workbook.CreateWorkSheet("SalesData");

dataSheet["A1"].Value = "Product";
dataSheet["B1"].Value = "Region";
dataSheet["C1"].Value = "Sales";

object[,] rows = {
    { "Laptop",   "Hayırrth", 1200 },
    { "Laptop",   "South", 1500 },
    { "Phone",    "Hayırrth",  800 },
    { "Phone",    "South",  950 },
    { "Tablet",   "East",   600 },
    { "Tablet",   "West",   750 },
    { "Monitor",  "Hayırrth",  400 },
    { "Monitor",  "South",  500 },
    { "Keyboard", "East",   300 },
};
for (int i = 0; i < rows.GetLength(0); i++)
{
    dataSheet[$"A{i + 2}"].Value = rows[i, 0];
    dataSheet[$"B{i + 2}"].Value = rows[i, 1];
    dataSheet[$"C{i + 2}"].Value = rows[i, 2];
}

// Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout
DataTable table = dataSheet["A1:C10"].ToDataTable(true);
var summary = table.AsEnumerable()
    .GroupBy(row => row.Field<string>("Product"))
    .Select((group, idx) => new
    {
        Product    = group.Key,
        TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
        RegionCount = group.Select(r => r.Field<string>("Region")).Distinct().Count(),
        RowIndex   = idx + 2
    })
    .OrderByDescending(x => x.TotalSales);

// Write the summary sheet
WorkSheet summarySheet = workbook.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Product";
summarySheet["B1"].Value = "Total Sales";
summarySheet["C1"].Value = "Regions";

foreach (var item in summary)
{
    summarySheet[$"A{item.RowIndex}"].Value = item.Product;
    summarySheet[$"B{item.RowIndex}"].Value = (double)item.TotalSales;
    summarySheet[$"C{item.RowIndex}"].Value = item.RegionCount;
}

// Apply currency format to the sales column
summarySheet["B:B"].FormatString = "$#,##0.00";

// Bold the header row
summarySheet["A1:C1"].Style.Font.Bold = true;

// Save -- no COM cleanup needed
workbook.SaveAs(@"C:\output\analysis_ironxl.xlsx");

Serbest bırakılacak COM nesneleri yok, sona erdirilecek Excel süreci yok ve yönetilecek bir Office lisansı yok. Aynı kod, Linux, macOS ve Windows üzerinde herhangi bir değişiklik olmadan derlenir ve çalışır. Toplama API'si hakkında daha fazla bilgi için IronXL Çalışma Sayfası dokümantasyonunu ziyaret edin.

Çıktı

C# Interop ile IronXL kullanarak Excel'de Pivot Tablo Nasıl Oluşturulur: Resim 6 - IronXL Çıktısı

C# Interop ile IronXL kullanarak Excel'de Pivot Tablo Nasıl Oluşturulur: Resim 7 - Özet Çıktısı

Dağıtım ve Bakımdaki Anahtar Farklılıklar Nelerdir?

Dağıtım Gereklilikleri

Interop tabanlı bir uygulama dağıtımı, hedef ortamın Windows çalıştırıyor olması, doğru Office sürümünün yüklü olması ve sunucuda COM otomasyon izinlerinin yapılandırılması gerektiğini doğrulamayı içerir. Bulut barındırılan ortamlar ve konteynerize edilmiş iş yükleri, tipik olarak bu gereksinimleri, sanallaştırılmış Windows masaüstü altyapısı eklenmeden karşılayamaz, bu da maliyeti ve operasyonel karmaşıklığı önemli ölçüde artırır.

IronXL'de böyle sınırlamalar yoktur. NuGet paketini ekleyin, hedef çerçevenizi .NET 6 veya daha üstü bir sürüme ayarlayın ve uygulama, Linux konteynerleri, Azure App Service on Linux, AWS Lambda ve şirket içi Windows sunucuları dahil herhangi bir ana makineye dağıtılır. IronXL sistem gereksinimleri sayfası, tam uyumluluk matrisini listelemektedir.

Hata İşleme ve Hata Ayıklama

Interop hataları, kullanıcıya görünür mesajlara haritalamak zor olan COM istisnaları (COMException) olarak yüzeye çıkar. Yüklenmiş Office sürümü ile Interop bileşeni arasındaki sürüm uyumsuzlukları, başka bir hata modu ekler. Bu sorunların hata ayıklaması, genellikle geliştirme makinesinde belirli bir Office sürümünü yeniden üretmeyi gerektirir.

IronXL, açıklayıcı mesajlarla standart System.Exception alt sınıfları atar. COM hata kodlarını anlamadan, anlamlı geri bildirimler sunabilir ve dosya işlemlerini bir try-catch bloğunda sarmalayabilirsiniz. IronXL sorun giderme kılavuzu yaygın istisnalar ve çözümlerini kapsar.

Bellek ve Performans

COM nesneleri yönetilmeyen belleği tutar. Kodunuz birçok çalışma sayfasını işler veya bir döngüde çalışıyorsa, her referansı düzgün bir şekilde serbest bırakmamak zaman içerisinde bellek büyümesine neden olur -- bu da bir üretim olayına neden oluncaya kadar algılaması zor bir sorundur. Interop, aynı zamanda doğası gereği tek iş parçacıklıdır çünkü tek bir Excel penceresi ile çalışır.

IronXL, .NET çöp toplayıcısı tarafından desteklenen yönetilen nesneler kullanır. Nesneler kapsamdan çıktığında bellek otomatik olarak geri kazanılır. Birden çok çalışma kitabını paralel olarak işlemek basittir çünkü kilitlerle korumaya ihtiyaç duyan paylaşılan bir COM durumu yoktur.

İki Yaklaşım Arasında Nasıl Seçim Yapmalısınız?

Doğru araç, iki kısıtlamaya bağlıdır: kodun nerede çalıştığı ve yerel özet tablo XML'inin gerekli olup olmadığı.

Excel Interop'u seçin:

  • İş yükü, yalnızca Windows masaüstü makinelerde çalışıyor ve Office zaten yüklü
  • Çıktı dosyasında eksiksiz yerel özet tablo formatlama (dilimleyiciler, gruplayan tarih alanları, hesaplanan öğeler) gerekli
  • Mevcut bir Interop kod tabanını koruyor ve tam bir yeniden yazma haklı görünmüyor

IronXL'u seçin:

  • Uygulama bir sunucuda, konteynerde veya bulut fonksiyonunda çalışıyor
  • Platformlar arası veya Linux dağıtımı gerekli
  • Veri birleştirme mantığını bir Excel sürecine bağımlı olmadan birim testleriyle test edilebilir istiyorsunuz
  • Excel dosyalarını geniş ölçekte veya paralel olarak işlemeye ihtiyacınız var

Çoğu yeni .NET 10 projesi için, IronXL pratik bir varsayılan seçenektir. IronXL kütüphanesi ayrıca Excel dosyalarını C#'ta okumak, grafikler oluşturmak, hücre stillerini uygulamak, formüllerle çalışmak ve Excel verilerini DataTable'a aktarma konularını kapsamaktadır -- yığınınızda birden fazla kütüphâneo ihtiyaç azaltılır.

C# Interop ile IronXL kullanarak Excel'de Pivot Tablo Nasıl Oluşturulur: Resim 8 - Özellikler

IronXL'nin Veri Analizini Destekleyen Ekstra Özellikleri Nelerdir?

Temel birleştirmenin ötesinde, IronXL daha zengin veri analizi iş akışlarını destekleyen çeşitli özellikler sunar:

Verileri Sıralama ve Filtreleme

Birleştirme sayfasını yazmadan önce bir aralığı artan veya azalan sıraya göre sıralayabilirsiniz. Bu, çıktının her zaman verileri tutarlı bir sırayla sunduğunu ve aşağı akış işlemlerini daha tahmin edilebilir hale getirir. Aralık seviyesinde sıralama seçenekleri için IronXL sıralama belgelerine bakın.

Koşullu Biçimlendirme Uygulama

Ayrık değerleri veya eşikleri vurgulamak için programlı koşullu biçimlendirme kuralları uygulayın. Örneğin, satışlar bir hedefin altına düştüğünde özet sayfadaki hücreleri kırmızı renkle boyayarak, son kullanıcıların manuel kural yapılandırmaları gerektirmeden anında bir görünüm sağlar.

Mevcut Excel Dosyalarını Okuma

Kaynak veri bir veritabanından ziyade mevcut bir elektronik tablo sayfasından geliyorsa, doğrudan WorkBook.Load ile yükleyebilirsiniz:

using IronXL;

WorkBook existing = WorkBook.Load(@"C:\data\sales_report.xlsx");
WorkSheet sheet = existing.WorkSheets[0];

// Read column C starting at row 2
var salesValues = sheet["C2:C100"]
    .Where(cell => cell.Value != null && cell.Value.ToString() != string.Empty)
    .Select(cell => cell.DecimalValue)
    .ToList();

decimal total = salesValues.Sum();
Console.WriteLine($"Total sales from file: {total:C}");

Bu desen, .xlsx, .xls, .csv ve IronXL tarafından desteklenen diğer formatlar için çalışır. Desteklenen formatlarla ilgili ayrıntılar IronXL dosya formatı belgelerinde bulunmaktadır.

CSV'ye Aktarma

Bir özet çalışma sayfası ürettikten sonra, bunu Excel'i kabul etmeyen aşağı akış sistemleri için CSV'ye aktarabilirsiniz:

workbook.SaveAsCsv(@"C:\output\summary.csv");

Bu, son tüketicinin bir veritabanı aktarım aracı veya bir veri ambarı yükleyicisi olduğu ETL hatlarında özellikle kullanışlıdır.

IronXL ile Nasıl Ücretsiz Başlayabilirsiniz?

IronXL, aboneliğe bağlı kalmadan tüm özellik setini değerlendirmenizi sağlayan bir ücretsiz deneme lisansı ile mevcuttur. Deneme, çıktı dosyalarına bir filigran koyar, bu üretim lisans anahtarını uyguladığınızda kaldırılır.

Kodda bir lisans anahtarını etkinleştirmek için, herhangi bir IronXL işleminden önce ayarlayın:

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

Ayrıca, anahtarı bir ortam değişkeni (IRONXL_LICENSEKEY) aracılığıyla veya ASP.NET Core projelerinde appsettings.json aracılığıyla ayarlayabilirsiniz. IronXL lisanslama sayfası, takım ve organizasyonel seçenekler dahil olmak üzere mevcut tüm katmanları açıklar.

Üretim dağıtımları için, ASP.NET Core, Azure Functions ve Docker'ı kapsayan desenler için IronXL dağıtım belgeleri ve IronXL rehber kitaplığını inceleyin.

Bir Sonraki Adımı Nasıl Alabilirsiniz?

C# ile Excel özet tablolar, Office bağımlılığı ve COM karmaşıklığı anlamına gelmek zorunda değil. IronXL ile, herhangi bir platformda çalışan, belleği otomatik olarak yöneten ve birim test çerçeveleri ve CI/CD hatları ile doğal olarak entegre olan düz .NET kodu yazarsınız.

Ücretsiz IronXL denemesini indirin ve bu kılavuzdaki örnekleri kendi verinize karşı çalıştırın. Sorularla karşılaşırsanız, hem deneme hem de lisanslı kullanıcılar için IronXL topluluk forumu ve destek portalı mevcuttur. Dağıtıma hazır olduğunuzda, lisanslama seçeneklerini inceleyin ve takım boyutunuza ve kullanım hacminize uyan planı bulun.

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