IRONSOFTWAREHOME
IRONXL KULLANARAK

IronXL Kullanarak Office Gerektirmeyen C# Dilinde DataSet'i Excel'e Aktarma

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

C#'ta bir DataSet veya DataTable'ı Excel'e dışa aktarmak, yapılandırılmış bellekteki verileri profesyonel elektronik tablo dosyalarına dönüştürmenin güvenilir bir yolunu sunar -- hedef makinada Microsoft Office yüklü olmasına bağlı olmadan. İster bir SQL veritabanından kayıt çekin, programatik olarak bir DataSet oluşturun, ister mevcut bir DataGrid ile çalışın, IronXL temiz, kod-öncelikli bir API aracılığıyla tüm hattı yönetir. Bu kılavuz, üst düzey C# ifadelerini ve .NET 10'u kullanarak her ana senaryoyu -- tek tabloluk dışa aktarmadan çok sayfalı çalışma kitaplarına ve canlı veritabanı sorgu sonuçlarına kadar -- ele alır.

Bir kez IronXL yükleyin, birkaç satır kod yazın ve verileriniz tek bir Office bağımlılığı olmadan bir XLSX dosyasında. Aşağıdaki bölümler, kurulum, çekirdek biçimler, gelişmiş biçimlendirme ve veritabanı entegrasyonu konularında doğrudan kendi projelerinize kopyalayıp yapıştırabileceğiniz bir şekilde ele alınır.

Excel Dışa Aktarımı İçin IronXL Nasıl Kurulur?

Herhangi bir dışa aktarma kodu yazmadan önce, NuGet Paket Yöneticisi aracılığıyla projenize IronXL'yi ekleyin. Projenizin kök dizininde bir terminal açın ve .NET CLI komutunu çalıştırın veya Visual Studio'da Paket Yöneticisi Konsolu'nu kullanarak Install-Package komutunu kullanın:

dotnet add package IronXL.Excel

Veya Visual Studio Paket Yöneticisi Konsolunda:

PM > Install-Package IronXL.Excel

Yüklemeden sonra, IronXL ad alanını içe aktarmak için üst düzey bir using ifadesi ekleyin:

using IronXL;
using System.Data;

IronXL, .NET 8, .NET 9 ve .NET 10'u ve aynı zamanda daha eski .NET Framework sürümlerini (4.6.2+) hedef alır. Herhangi bir makinede -- sunucu, masaüstü veya bulut -- Office kurulumu gerekmez. Paket yüklendikten sonra, tamamen yönetilen kodda XLSX, XLS ve CSV dosyalarını oluşturabilir, okuyabilir ve yazabilirsiniz.

Ayrıntılı yükleme seçenekleri için IronXL kurulum kılavuzunu ve sürüm geçmişi için NuGet paket sayfasını inceleyin.

Tek Bir DataTable'ı Excel Dosyasına Nasıl Dışa Aktarırsınız?

En yaygın senaryo, bir DataTable'ı tek bir çalışma sayfasına dışa aktarmaktır. IronXL'nin WorkBook ve WorkSheet sınıfları Excel nesne modeline doğal olarak eşleşir. Bir çalışma kitabı oluşturur, bir çalışma sayfası ekler, ardından DataTable'ın sütunlarını ve satırlarını yineleyebilirsiniz.

Aşağıdaki örnek, bellekte bir Çalışanlar DataTable'ı oluşturur ve bunu EmployeeData.xlsx'ye yazar:

using IronXL;
using System.Data;

// Build an in-memory DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));

dt.Rows.Add(1, "John Smith", "Engineering");
dt.Rows.Add(2, "Sarah Jones", "Marketing");
dt.Rows.Add(3, "Mike Wilson", "Sales");

// Create a workbook and a named worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write column headers in row 0
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}

// Write data rows starting at row 1
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dt.Rows[row][col].ToString());
    }
}

workbook.SaveAs("EmployeeData.xlsx");

Çıktı

Excel VB .NET'e Veri Kümesi Nasıl Dışa Aktarılır: IronXL ile Tam Kılavuz: Resim 1 - VB.NET'de basit bir DataTable'i Excel'e dışa aktarma çıktısı

SetCellValue int, double, string ve bool kabul eder - böylece ekstra dönüştürme olmadan yerel Excel hücre tiplerini elde edersiniz. Döngü şablonu her boyuttaki tablolar için çalışır çünkü IronXL doğrudan belleğe yazar ve yalnızca SaveAs çağrıldığında diske boşaltım yapar, süreci binlerce satır için bile verimli tutar.

Daha geniş bir okuma ve yazma teknikleri değerlendirmesi için, IronXL C# öğreticisi bu dışa aktarma deseninin yanında tüm dosya işlemlerinin kapsamını sunar.

Bir DataSet'i Birden Fazla Excel Çalışma Sayfasına Nasıl Dışa Aktarırız?

Bir DataSet birkaç ilgili tablo içerdiğinde -- örneğin Ürünler ve Siparişler gibi -- her bir DataTable'ı kendi çalışma sayfasına bir çalışma kitabı içinde eşleyebilirsiniz. Bu, alıcıların birden fazla belgeyi açmasına gerek kalmadan tüm ilgili verileri tek bir dosyada görmelerini sağlar.

Aşağıdaki döngü ds.Tables iterasyonunu gerçekleştirir ve tablo başına bir sayfa oluşturur:

using IronXL;
using System.Data;

// Build a DataSet with two related tables
DataSet ds = new DataSet("CompanyData");

DataTable dtProducts = new DataTable("Products");
dtProducts.Columns.Add("ProductID", typeof(int));
dtProducts.Columns.Add("ProductName", typeof(string));
dtProducts.Columns.Add("Price", typeof(decimal));
dtProducts.Rows.Add(101, "Widget A", 29.99m);
dtProducts.Rows.Add(102, "Widget B", 49.99m);
ds.Tables.Add(dtProducts);

DataTable dtOrders = new DataTable("Orders");
dtOrders.Columns.Add("OrderID", typeof(int));
dtOrders.Columns.Add("Customer", typeof(string));
dtOrders.Columns.Add("Total", typeof(decimal));
dtOrders.Rows.Add(1001, "Acme Corp", 599.90m);
dtOrders.Rows.Add(1002, "Tech Inc", 299.95m);
ds.Tables.Add(dtOrders);

// Create one workbook and iterate each DataTable
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

foreach (DataTable table in ds.Tables)
{
    WorkSheet sheet = workbook.CreateWorkSheet(table.TableName);

    // Write headers
    for (int col = 0; col < table.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, table.Columns[col].ColumnName);
    }

    // Write rows
    for (int row = 0; row < table.Rows.Count; row++)
    {
        for (int col = 0; col < table.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, table.Rows[row][col].ToString());
        }
    }
}

workbook.SaveAs("CompanyReport.xlsx");

Çıktı

Excel VB .NET'e Veri Kümesi Nasıl Dışa Aktarılır: IronXL ile Tam Kılavuz: Resim 2 - Ayrı çalışma sayfaları olarak dışa aktarılan DataSet ile oluşturulan Excel dosyası

Her çalışma sayfası kaynak DataTable'ın adıyla adlandırılır, bu da Excel içindeki gezinmeyi kolaylaştırır. WorkBook.Create çalışma kitabını bellekte tahsis ettiği için döngüde dosyayı yeniden açmadan çalışma sayfaları eklemeye devam edebilirsiniz -- IronXL tüm XLSX yapısını disk yazımından önce oluşturur.

IronXL Çalışma Kitabı dökümantasyonu, Çalışma Kitabı nesnesi üzerinde mevcut olan her yöntemi, yaprak sıralamasını yenileme, parola koruması ve XLSX dışındaki formatlarda kaydetme dahil olmak üzere listeler.

Excel Dışa Aktarımlarına Üstbilgi Biçimlendirmesi Nasıl Eklenir?

Düz veri dışa aktarımları işlevseldir, ancak kalın üstbilgiler ve sütun genişlikleri eklemek çıktıyı iş bağlamında hemen kullanabilir hale getirir. IronXL, hücre ve aralık stillerini herhangi bir WorkSheet aralığına bağlı olan Style nesnesi aracılığıyla sunar.

Aşağıdaki kod parçası, üstbilgi satırına kalın yazı tipi biçimlendirmesi uygular ve veri yazar yazmaz sütunları otomatik olarak boyutlandırır:

using IronXL;
using System.Data;

DataTable dt = new DataTable("Sales");
dt.Columns.Add("Region", typeof(string));
dt.Columns.Add("Q1", typeof(decimal));
dt.Columns.Add("Q2", typeof(decimal));
dt.Columns.Add("Q3", typeof(decimal));
dt.Columns.Add("Q4", typeof(decimal));

dt.Rows.Add("Hayırrth", 120000m, 135000m, 142000m, 158000m);
dt.Rows.Add("South", 98000m, 104000m, 112000m, 121000m);
dt.Rows.Add("East",  87000m, 93000m,  99000m,  108000m);
dt.Rows.Add("West",  145000m, 152000m, 161000m, 174000m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");

// Write and style headers
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    sheet["A1:E1"].Style.Font.Bold = true;
    sheet["A1:E1"].Style.Font.Height = 12;
}

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        sheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
    }
}

workbook.SaveAs("SalesReport.xlsx");

Style.Font.Bold özelliği, tek bir ifadede tüm başlık aralığına uygulanır. IronXL ayrıca arka plan renklerini (Style.BackgroundColor), kenarlık stillerini (Style.Border), sayı formatlarını (Style.NumberFormat.FormatCode) ve yatay hizalamayı (Style.HorizontalAlignment) destekler. Tam stil referansı için IronXL hücre biçimlendirme kılavuzuna bakın.

Veritabanı Sorgu Sonuçlarını Excel'e Nasıl Dışa Aktarırız?

Bir SQL veritabanına bağlanmak ve sonuçları doğrudan Excel'e dışa aktarmak, gerçek dünyadaki bir kullanım örneğini kapsar -- planlı raporlar, veri anlık görüntüleri ve yönetim dışa aktarımları. Yaklaşım, bir Veri Kümesi'ni SqlDataAdapter kullanarak doldurur ve sonra ortaya çıkan DataTable'ı bir IronXL çalışma sayfasına haritalar.

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=SalesDB;Integrated Security=True;";
string query = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers";

// Fill DataSet from SQL query
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
    adapter.Fill(ds, "Customers");
}

DataTable dt = ds.Tables["Customers"]!;

// Create workbook and export
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("CustomerData");

// Bold header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
worksheet["A1:D1"].Style.Font.Bold = true;

// Write rows, handling DBNull values safely
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        object cellValue = dt.Rows[row][col];
        worksheet.SetCellValue(row + 1, col,
            cellValue == DBNull.Value ? "" : cellValue.ToString()!);
    }
}

workbook.SaveAs("CustomerExport.xlsx");
Console.WriteLine("Export complete.");

Veritabanı Dışa Aktarımı İçin Anahtar Hayırktalar

Boş kontrol (cellValue == DBNull.Value ? cellValue.ToString()) prevents exceptions when the database returns NULL değerleri -- isteğe bağlı sütunlarla sıkça görülen bir durum. Üstbilgi satırına kalın biçimlendirme, rapor alıcılarının hemen üstbilgileri veriden ayırt etmesini sağlar.

C# nesnelerine Excel'den veri okuma konusunda daha fazla desen için, IronXL DataTable dışa aktarma öğreticisi bu iş akışını nasıl tersine çevireceğinizi gösterir.

IronXL Diğer Excel Dışa Aktarma Yaklaşımlarıyla Nasıl Karşılaştırılır?

Bir kütüphane seçmeden önce, ana seçeneklerin, DataSet dışa aktarma senaryoları için en önemli olan alanlarda birbirlerine karşı nasıl biriktiğini anlamak faydalıdır.

.NET DataSet senaryoları için Excel dışa aktarma kütüphanesi karşılaştırması
YaklaşımOfis GerekliXLSX DesteğiStil API'siÇok SayfalıPerformans (büyük veri)
IronXLHayırEvetTamEvetYüksek
Microsoft Office InteropEvetEvetTamEvetDüşük
EPPlusHayırEvetKısmiEvetYüksek
ClosedXMLHayırEvetKısmiEvetOrta
CSV (manuel)HayırHayırHayırneHayırÇok yüksek

Microsoft Office Interop yalnızca Office yüklü Windows makinelerde çalışır, bu da sunucu dağıtımlarını ve bulut işlevlerini dışarıda bırakır. IronXL, EPPlus ve ClosedXML tümü sunucu tarafı üretimini destekler -- anahtar ayrıştırıcı stil API'sinin kapsamı ve lisans modeli. IronXL'nin lisansı ticari kullanımı içerir ve tüm .NET hedef çerçevelerini tek bir paket kapsamında kapsar.

Üçüncü taraf kıyaslamaları ve karşılaştırmalar için, Microsoft dökümantasyonu Excel dosya formatları ve EPPlus proje sayfası, projeniz için doğru kararı vermek adına ek bağlam sağlar.

Büyük DataSetleri Bellek Sorunları Olmadan Nasıl Yönetirsiniz?

On binlerce satıra sahip DataTables dışa aktarıldığında, bellek kullanımının öngörülebilir olması önemlidir. Aşağıdaki desen, tam sonuç kümesini önce bir DataTable'a yüklemek yerine bir IDataReader'den veri akışı yapar. Bu, hem okuyucu tamponunu hem de DataTable'ı eşzamanlı olarak tutmanın çift belleği maliyetinden kaçınır.

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=InventoryDB;Integrated Security=True;";
string query = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products";

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Inventory");

using SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

using SqlCommand cmd = new SqlCommand(query, conn);
using SqlDataReader reader = cmd.ExecuteReader();

// Write schema-derived headers
for (int col = 0; col < reader.FieldCount; col++)
{
    sheet.SetCellValue(0, col, reader.GetName(col));
}

// Stream rows directly into IronXL without buffering a DataTable
int excelRow = 1;
while (reader.Read())
{
    for (int col = 0; col < reader.FieldCount; col++)
    {
        sheet.SetCellValue(excelRow, col,
            reader.IsDBNull(col) ? "" : reader.GetValue(col).ToString()!);
    }
    excelRow++;
}

workbook.SaveAs("InventoryExport.xlsx");
Console.WriteLine($"Exported {excelRow - 1} rows.");

Bu desen, sonuç kümesinin 50.000 satırı aşabileceği veya bellek kısıtlamaları bulunan bir hizmet içinde çalıştığında önerilir. IronXL performans dökümantasyonu, yüksek hacimli dışa aktarmalar için ek bellek ve verim ayarlama seçeneklerini kapsar.

Çok Büyük Dışa Aktarımlar İçin CSV'ye Toplu Kaydetme

Bellek çok sıkışıksa, 500.000 satırı aşan dışa aktarımlar için çıktıyı birden çok çalışma kitabına bölmeyi veya CSV formatına dışa aktarmayı düşünün:

using IronXL;

// IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv");

CSV, biçimlendirme ve çoklu sayfa desteğini kaybeder, ancak ham ayrılmış verileri tüketen aşağı akış ETL işlemleri için geçerli kalır.

Excel Dosyalarını Farklı Formatlara ve Yer Konumlarına Nasıl Kaydedersiniz?

IronXL, dosya yoluna, MemoryStream ve byte[] -- ASP.NET uygulamalarının Excel'i bir indirme yanıtı olarak döndürmesi gerektiğinde önemlidir.

using IronXL;
using System.IO;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");
sheet.SetCellValue(0, 0, "Generated Report");

// Save to file path
workbook.SaveAs("Report.xlsx");

// Save as XLS (legacy format)
workbook.SaveAs("Report.xls");

// Save to MemoryStream for HTTP response
using MemoryStream ms = new MemoryStream();
workbook.SaveAs(ms);
byte[] fileBytes = ms.ToArray();
// fileBytes can be returned from an ASP.NET controller action

ASP.NET Core için, tarayıcı indirmesini tetiklemek üzere denetleyici aksiyonunuzdan File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx") döndürün. IronXL ASP.NET Excel kılavuzu tam denetleyici entegrasyon desenini gösterir.

Alternatif .NET Excel kütüphaneleri için, Open XML SDK, birçok kütüphanenin temel aldığı açık-kaynaklı bir temeldir.

Desteklenen Çıktı Formatları

IronXL, ek bağımlılık olmadan aşağıdaki formatlara kaydeder:

  • XLSX -- OpenXML formatı, Excel 2007 ve sonrası ile uyumlu
  • XLS -- Eski binar format, Excel 97-2003 ile uyumlu
  • CSV -- Virgülle ayrılmış değerler, evrensel olarak desteklenir
  • TSV -- Sekmeyle ayrılmış değerler
  • JSON -- Yapılandırılmış veri dışa aktarım

Formatları, SaveAs yolundaki dosya uzantısını değiştirerek veya bir ExcelFileFormat enum değeri kabul eden aşırı yüklenmiş yöntemi kullanarak değiştirin.

Dışa Aktarılan Excel Dosyasının Doğru Olduğunu Nasıl Doğrularsınız?

Dışa aktarımdan sonra, satır sayımlarını doğrulamak, değerleri kontrol etmek veya bir test projesinde otomatik talepler yürütmek için dosyayı IronXL ile geri okuyabilirsiniz:

using IronXL;

WorkBook loaded = WorkBook.Load("EmployeeData.xlsx");
WorkSheet sheet = loaded.WorkSheets[0];

// Verify row count (header row + data rows)
int totalRows = sheet.Rows.Count();
Console.WriteLine($"Rows in file: {totalRows}");

// Spot-check specific cell values
string header = sheet["A1"].StringValue;
string firstEmployee = sheet["A2"].StringValue;

Console.WriteLine($"Header: {header}, First row: {firstEmployee}");

Bu doğrulama deseni, dışa aktarma doğruluğunun dosyaların dış sistemlere gönderilmeden önce doğrulanması gerektiği entegre test takımlarında özellikle kullanışlıdır. IronXL okuma eğitimi, bir dosyayı yükledikten sonra kullanılabilir tüm okuma işlemlerini gösterir.

.NET'te DataSet ve DataTable kalıpları hakkında daha fazla okuma için, Microsoft DataSet dökümantasyonu ADO.NET nesne modelini derinlemesine kapsar.

Sonraki Adımlarınız Neler?

Artık C#'daki her ana DataSet-ten Excel dışa aktarma senaryosu için çalışan kalıplarınız var -- tek bir DataTable'dan çok sayfalı çalışma kitaplarına, veritabanı ile sürüklenen dışa aktarımlarına, biçimlendirilmiş üstbilgilerine ve büyük veri akışına kadar. Hedefinize göre bir sonraki adımı nasıl atacağınız:

  • IronXL'yi ücretsiz deneyin -- Üstteki örnekleri kendi verilerinize karşı çalıştırın ve üretime geçmeden önce kararınızı vermek için ücretsiz bir deneme lisansı ile başlayın.
  • Tüm API referansını okuyun -- IronXL nesne referansı Çalışma Kitabı, Çalışma Sayfası ve hücre aralıklarındaki her yöntemi kapsar.
  • İlgili dışa aktarma eğitimlerine göz atın -- C# DataTable'den Excel'e rehberi, ters iş akışını -- Excel'in geri dönüştürülerek DataTable nesnelerine okunmasını -- kapsar.
  • Biçimlendirme seçeneklerini gözden geçirin -- IronXL hücre biçimlendirme dokümanları sayı formatlarını, kenarları, arka plan renklerini ve hizalama seçeneklerini gösterir.
  • Lisansı kontrol edin -- Üretim dağıtımları için IronXL lisans sayfasına bakın ve Geliştirici, Organizasyon ve Telif Ücretsiz seçenekleri arasında seçim yapın.
  • Diğer Iron Software araçları ile karşılaştırın -- Projenizin ayrıca PDF oluşturma veya OCR'ye ihtiyacı varsa, Iron Software ürün suiti, birden fazla kütüphaneyi indirimli fiyata toplamanızı sağlar.

Burada ele alınan kalıplara dayanarak, zamanlanmış görev otomasyonu, ASP.NET Core indirme uç noktaları ve tamamen yönetilen C#'ta çok formatlı çıkış boru hatları oluşturabilirsiniz -- Office yok, COM yok, NuGet paketinin ötesinde çalışma zamanı bağımlılığı yok.

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