Altbilgi içeriğine atla
IRONXL KULLANARAK

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

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ış
Kriterler Excel Interop IronXL
Office gerekli Evet Hayır
Sadece Windows Evet Hayır – çapraz platform
Bellek yönetimi Manuel COM bırakma Otomatik (.NET GC)
Sunucu dağıtımı Zor Basit
Yerel pivot tablo Tam Excel pivot API'si LINQ aracılığıyla veri toplama
Lisans gerekiyor Office 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
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:

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

Şimdi IronXL ile başlayın.
green 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);
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);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices

' Launch Excel and set up workbooks
Dim excelApp As New Excel.Application()
excelApp.Visible = False
Dim workbook As Excel.Workbook = excelApp.Workbooks.Add()
Dim dataSheet As Excel.Worksheet = CType(workbook.Worksheets(1), Excel.Worksheet)
dataSheet.Name = "SalesData"
Dim pivotSheet As Excel.Worksheet = CType(workbook.Worksheets.Add(), Excel.Worksheet)
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
Dim rows As Object(,) = {
    {"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 i As Integer = 0 To rows.GetLength(0) - 1
    dataSheet.Cells(i + 2, 1) = rows(i, 0)
    dataSheet.Cells(i + 2, 2) = rows(i, 1)
    dataSheet.Cells(i + 2, 3) = rows(i, 2)
Next

' Build pivot cache from source range
Dim dataRange As Excel.Range = dataSheet.Range("A1:C10")
Dim pivotCache As Excel.PivotCache = workbook.PivotCaches().Create(
    Excel.XlPivotTableSourceType.xlDatabase, dataRange)

' Create the PivotTable on the pivot sheet
Dim pivotTables As Excel.PivotTables = CType(pivotSheet.PivotTables(), Excel.PivotTables)
Dim pivotTable As Excel.PivotTable = pivotTables.Add(
    pivotCache, pivotSheet.Range("A3"), "SalesPivot")

' Assign field orientations
CType(pivotTable.PivotFields("Product"), Excel.PivotField).Orientation =
    Excel.XlPivotFieldOrientation.xlRowField
CType(pivotTable.PivotFields("Region"), Excel.PivotField).Orientation =
    Excel.XlPivotFieldOrientation.xlColumnField
CType(pivotTable.PivotFields("Sales"), Excel.PivotField).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)
$vbLabelText   $csharpLabel

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");
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");
Imports IronXL
Imports System.Data
Imports System.Linq

' Create workbook and populate source data
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim dataSheet As WorkSheet = workbook.CreateWorkSheet("SalesData")

dataSheet("A1").Value = "Product"
dataSheet("B1").Value = "Region"
dataSheet("C1").Value = "Sales"

Dim rows As Object(,) = {
    {"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 i As Integer = 0 To rows.GetLength(0) - 1
    dataSheet($"A{i + 2}").Value = rows(i, 0)
    dataSheet($"B{i + 2}").Value = rows(i, 1)
    dataSheet($"C{i + 2}").Value = rows(i, 2)
Next

' Aggregate data with LINQ -- equivalent to a pivot table row/column/value layout
Dim table As DataTable = dataSheet("A1:C10").ToDataTable(True)
Dim summary = table.AsEnumerable() _
    .GroupBy(Function(row) row.Field(Of String)("Product")) _
    .Select(Function(group, idx) New With {
        .Product = group.Key,
        .TotalSales = group.Sum(Function(r) Convert.ToDecimal(r("Sales"))),
        .RegionCount = group.Select(Function(r) r.Field(Of String)("Region")).Distinct().Count(),
        .RowIndex = idx + 2
    }) _
    .OrderByDescending(Function(x) x.TotalSales)

' Write the summary sheet
Dim summarySheet As WorkSheet = workbook.CreateWorkSheet("Summary")
summarySheet("A1").Value = "Product"
summarySheet("B1").Value = "Total Sales"
summarySheet("C1").Value = "Regions"

For Each item In summary
    summarySheet($"A{item.RowIndex}").Value = item.Product
    summarySheet($"B{item.RowIndex}").Value = CDbl(item.TotalSales)
    summarySheet($"C{item.RowIndex}").Value = item.RegionCount
Next

' 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")
$vbLabelText   $csharpLabel

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

Dim existing As WorkBook = WorkBook.Load("C:\data\sales_report.xlsx")
Dim sheet As WorkSheet = existing.WorkSheets(0)

' Read column C starting at row 2
Dim salesValues = sheet("C2:C100") _
    .Where(Function(cell) cell.Value IsNot Nothing AndAlso cell.Value.ToString() <> String.Empty) _
    .Select(Function(cell) cell.DecimalValue) _
    .ToList()

Dim total As Decimal = salesValues.Sum()
Console.WriteLine($"Total sales from file: {total:C}")
$vbLabelText   $csharpLabel

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");
workbook.SaveAsCsv(@"C:\output\summary.csv");
workbook.SaveAsCsv("C:\output\summary.csv")
$vbLabelText   $csharpLabel

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";
IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
Imports IronXL

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
$vbLabelText   $csharpLabel

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.

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

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.

Sıkça Sorulan Sorular

Pivot tablolar oluşturmak için IronXL kullanmanın Excel Interop'a göre avantajı nedir?

IronXL, geleneksel Excel Interop'a kıyasla Excel dosyalarında pivot tablolar oluşturmanın daha modern ve verimli bir yolunu sunar. Süreci basitleştirir ve gerekli olan boilerplate kodu azaltır.

C# kullanarak IronXL ile Excel'de pivot tablo oluşturabilir miyim?

Evet, IronXL, C# kullanarak Excel'de pivot tablolar oluşturmak için doğrudan bir yöntem sağlar. Geliştiricilerin Excel dosyalarını Excel Interop'a ihtiyaç duymadan kolayca manipüle etmelerine olanak tanır.

IronXL, .NET uygulamalarıyla uyumlu mu?

IronXL, .NET uygulamaları ile tamamen uyumludur ve Excel işlevselliklerini C# projelerine entegre etmek isteyen geliştiriciler için mükemmel bir seçimdir.

IronXL, sistemde Excel'in kurulu olmasını gerektirir mi?

Hayır, IronXL, sistemde Microsoft Excel'in kurulu olmasını gerektirmez. Bağımsız çalışır, bu da Interop'un gerektirdiği Excel kurulumuna kıyasla önemli bir avantajdır.

IronXL, pivot tabloların oluşturulma sürecini nasıl basitleştirir?

IronXL, kapsamlı boilerplate koduna olan ihtiyacı azaltan kullanıcı dostu bir API sağlayarak süreci basitleştirir, bu da geliştirme sürecini daha hızlı ve verimli hale getirir.

IronXL'ı kullanmak için sistem gereksinimleri nelerdir?

IronXL, .NET çerçeve uyumlu bir ortama ihtiyaç duyar, ancak Microsoft Excel kurulumu gerektirmez, bu da dağıtımı basitleştirir ve bağımlılıkları azaltır.

IronXL büyük Excel dosyalarını verimli bir şekilde işleyebilir mi?

Evet, IronXL, büyük Excel dosyalarını verimli bir şekilde yönetmek üzere tasarlanmıştır ve büyük miktarda veri işlemek için gereken işlemleri sağlar.

IronXL'ı Excel Interop'a kıyasla kullanımının bir öğrenme eğrisi var mı?

IronXL, Excel Interop'tan daha karmaşık olana kıyasla benimsemesini kolaylaştıran kapsamlı dökümantasyon ve örnekler ile içgüdüsel ve öğrenmesi kolay olacak şekilde tasarlanmıştır.

IronXL, pivot tablolar oluşturmaktan başka hangi Excel işlemlerini gerçekleştirebilir?

IronXL, Excel dosyalarını okuma ve yazma, hücreleri biçimlendirme ve formüller uygulama gibi çok çeşitli Excel işlemlerini gerçekleştirebilir.

IronXL, pivot tabloları Excel dışındaki formatlara aktarabilir mi?

IronXL esasen Excel işlemlerine odaklı olsa da, proje gereksinimlerinize bağlı olarak verileri CSV ve PDF gibi diğer formatlara da aktarabilir.

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ı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara