Birçok yazılım projesinde verilerin Excel dosyalarına aktarılması veya Excel dosyalarından sisteme yüklenmesi oldukça yaygın bir ihtiyaçtır. Özellikle raporlama sistemleri, veri aktarım araçları ve yönetim panelleri geliştirilirken Excel veri transferi önemli bir rol oynar.

.NET geliştiricileri için bu işlemleri kolaylaştıran en popüler kütüphanelerden biri EPPlus kütüphanesidir. EPPlus sayesinde Microsoft Office kurulu olmasa bile uygulama içerisinde Excel dosyaları oluşturabilir, Excel’e veri yazabilir veya Excel’den veri okuyabilirsiniz.

Bu rehberde C# EPPlus ile Excel veri transferi işlemlerini detaylı şekilde inceleyeceğiz. Ayrıca tek tek kod parçaları yerine doğrudan projeye eklenebilecek hazır Excel yardımcı sınıfı paylaşacağız. Böylece geliştiriciler bu sınıfı kopyalayıp projelerine ekleyerek Excel import ve export işlemlerini hızlıca kullanabilir.

EPPlus Nedir?

EPPlus, .NET uygulamalarında Excel dosyaları oluşturmak, düzenlemek ve okumak için kullanılan güçlü bir kütüphanedir. Excel dosyaları ile çalışmayı oldukça kolaylaştıran bu kütüphane, özellikle raporlama ve veri aktarımı işlemlerinde yaygın şekilde kullanılır.

Kısaca ifade etmek gerekirse:

EPPlus, .NET uygulamalarında Excel (.xlsx) dosyalarını programatik olarak oluşturmayı, düzenlemeyi ve veri transferi yapmayı sağlayan bir kütüphanedir.

EPPlus kullanarak aşağıdaki işlemleri gerçekleştirebilirsiniz:

  • Excel dosyası oluşturma
  • Excel’e veri yazma
  • Excel’den veri okuma
  • Excel raporları üretme
  • Excel tabloları oluşturma
  • Excel formülleri kullanma

Neden EPPlus Kullanılmalıdır?

Excel işlemleri için farklı kütüphaneler bulunmasına rağmen EPPlus geliştiriciler arasında oldukça popülerdir. Bunun en önemli nedeni kolay kullanımı ve güçlü özellikler sunmasıdır.

Özellik Açıklama
Office gerektirmez Sunucuda Microsoft Excel kurulumu gerekmez
Yüksek performans Büyük veri setlerinde hızlı çalışır
Kolay kullanım Basit API yapısı sayesinde hızlı geliştirme
.NET uyumluluğu .NET Core ve .NET Framework destekler
Geniş Excel desteği Grafik, tablo ve formül desteği

EPPlus Kurulumu

EPPlus kullanabilmek için projeye NuGet üzerinden kütüphaneyi eklemek gerekir.

Install-Package EPPlus

Kütüphane yüklendikten sonra aşağıdaki namespace projede kullanılmalıdır.

using OfficeOpenXml;

C# ile Excel Veri Transferi Mantığı

C# Excel veri transferi genellikle iki farklı işlemden oluşur:

  • Export → Verileri Excel dosyasına yazmak
  • Import → Excel dosyasından veri okumak

Gerçek projelerde bu işlemler genellikle tekrar tekrar kullanılır. Bu nedenle her yerde aynı kodları yazmak yerine yeniden kullanılabilir bir yardımcı sınıf oluşturmak en doğru yaklaşımdır.

Böylece:

  • Kod tekrarları ortadan kalkar
  • Bakımı kolaylaşır
  • Projede standart yapı oluşur

EPPlus Excel Yardımcı Sınıfı

Aşağıdaki sınıf doğrudan projeye eklenerek kullanılabilir. Bu sınıf sayesinde:

  • List verileri Excel’e aktarılabilir
  • Excel dosyasından veri okunabilir
  • Generic veri transferi yapılabilir

Bu yapı özellikle C# EPPlus Excel export ve import işlemleri için pratik bir çözüm sunar.

using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;

namespace ExcelHelper
{
    public static class EpplusExcelManager
    {
        static EpplusExcelManager()
        {
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
        }

        public static byte[] ExportToExcel<T>(List<T> data, string sheetName = "Sheet1")
        {
            using (ExcelPackage package = new ExcelPackage())
            {
                var sheet = package.Workbook.Worksheets.Add(sheetName);

                sheet.Cells["A1"].LoadFromCollection(data, true);

                FormatColumns<T>(sheet);

                sheet.Cells.AutoFitColumns();

                return package.GetAsByteArray();
            }
        }

        public static void ExportToFile<T>(List<T> data, string filePath, string sheetName = "Sheet1")
        {
            using (ExcelPackage package = new ExcelPackage())
            {
                var sheet = package.Workbook.Worksheets.Add(sheetName);

                sheet.Cells["A1"].LoadFromCollection(data, true);

                FormatColumns<T>(sheet);

                sheet.Cells.AutoFitColumns();

                File.WriteAllBytes(filePath, package.GetAsByteArray());
            }
        }

        private static void FormatColumns<T>(ExcelWorksheet sheet)
        {
            PropertyInfo[] props = typeof(T).GetProperties();

            for (int i = 0; i < props.Length; i++)
            {
                var prop = props[i];

                if (prop.PropertyType == typeof(DateTime) || prop.PropertyType == typeof(DateTime?))
                {
                    sheet.Column(i + 1).Style.Numberformat.Format = "yyyy-MM-dd HH:mm";
                }

                if (prop.PropertyType == typeof(decimal) || prop.PropertyType == typeof(decimal?))
                {
                    sheet.Column(i + 1).Style.Numberformat.Format = "#,##0.00";
                }

                if (prop.PropertyType == typeof(double) || prop.PropertyType == typeof(double?))
                {
                    sheet.Column(i + 1).Style.Numberformat.Format = "#,##0.00";
                }
            }
        }

        public static List<T> ImportFromExcel<T>(string filePath) where T : new()
        {
            var result = new List<T>();

            using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath)))
            {
                var sheet = package.Workbook.Worksheets[0];

                int rowCount = sheet.Dimension.Rows;
                int colCount = sheet.Dimension.Columns;

                for (int row = 2; row <= rowCount; row++)
                {
                    T item = new T();

                    for (int col = 1; col <= colCount; col++)
                    {
                        string header = sheet.Cells[1, col].Text;
                        string value = sheet.Cells[row, col].Text;

                        PropertyInfo prop = typeof(T).GetProperty(header);

                        if (prop == null || string.IsNullOrEmpty(value))
                            continue;

                        try
                        {
                            if (prop.PropertyType == typeof(DateTime) || prop.PropertyType == typeof(DateTime?))
                            {
                                if (DateTime.TryParse(value, out DateTime dt))
                                    prop.SetValue(item, dt);
                            }
                            else if (prop.PropertyType == typeof(int) || prop.PropertyType == typeof(int?))
                            {
                                if (int.TryParse(value, out int intVal))
                                    prop.SetValue(item, intVal);
                            }
                            else if (prop.PropertyType == typeof(decimal) || prop.PropertyType == typeof(decimal?))
                            {
                                if (decimal.TryParse(value, out decimal decVal))
                                    prop.SetValue(item, decVal);
                            }
                            else if (prop.PropertyType == typeof(double) || prop.PropertyType == typeof(double?))
                            {
                                if (double.TryParse(value, out double dblVal))
                                    prop.SetValue(item, dblVal);
                            }
                            else
                            {
                                prop.SetValue(item, Convert.ChangeType(value, prop.PropertyType));
                            }
                        }
                        catch
                        {
                        }
                    }

                    result.Add(item);
                }
            }

            return result;
        }
    }
}

Sınıfın Kullanımı

Yukarıda paylaşılan EpplusExcelManager sınıfı projeye eklendikten sonra Excel veri transferi işlemleri oldukça kolay hale gelir. Bu sınıf sayesinde Excel dosyası oluşturabilir, verileri Excel’e aktarabilir veya Excel dosyasından verileri okuyabilirsiniz.

Sınıf generic yapı ile hazırlandığı için farklı veri modelleri ile rahatlıkla kullanılabilir. Aşağıdaki örneklerde Excel export ve import işlemlerinin nasıl yapılacağı gösterilmektedir.

Örnek Model Sınıfı

Excel veri transferi işlemlerinde genellikle bir model sınıfı kullanılır. Örneğin aşağıdaki gibi bir Personel sınıfı oluşturulabilir.

public class Personel
{
    public int Id { get; set; }
    public string Ad { get; set; }
    public string Soyad { get; set; }
    public DateTime IseGirisTarihi { get; set; }
    public decimal Maas { get; set; }
}

Excel'e Veri Aktarma (Export)

Bir liste içerisindeki verileri Excel dosyasına aktarmak için ExportToExcel metodu kullanılabilir. Bu metod Excel dosyasını byte array olarak döndürür ve özellikle web projelerinde dosya indirme işlemleri için idealdir.

List<Personel> personeller = new List<Personel>()
{
    new Personel { Id = 1, Ad = "Ahmet", Soyad = "Yılmaz", IseGirisTarihi = DateTime.Now, Maas = 25000 },
    new Personel { Id = 2, Ad = "Mehmet", Soyad = "Demir", IseGirisTarihi = DateTime.Now.AddDays(-10), Maas = 28000 }
};

var excelBytes = EpplusExcelManager.ExportToExcel(personeller);

Excel Dosyasını Diske Kaydetme

Excel dosyasını doğrudan bilgisayara kaydetmek için ExportToFile metodu kullanılabilir.

List<Personel> personeller = new List<Personel>();

EpplusExcelManager.ExportToFile(personeller, "personeller.xlsx");

Excel Dosyasından Veri Okuma (Import)

Excel dosyasından veri okuyarak liste haline getirmek için ImportFromExcel metodu kullanılabilir. Bu metod Excel dosyasını okuyarak ilgili model tipine dönüştürür.

var personelListesi = EpplusExcelManager.ImportFromExcel<Personel>("personeller.xlsx");

ASP.NET Core Excel İndirme Örneği

ASP.NET Core projelerinde Excel dosyasını kullanıcıya indirme olarak sunmak oldukça yaygındır. ExportToExcel metodu byte array döndürdüğü için FileResult ile kolayca indirilebilir.

public IActionResult ExcelIndir()
{
    var data = servis.PersonelleriGetir();

    var excelBytes = EpplusExcelManager.ExportToExcel(data);

    return File(excelBytes,
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "personeller.xlsx");
}

Bu yöntem özellikle yönetim panelleri, raporlama sistemleri ve veri aktarım araçlarında oldukça sık kullanılır.

Excel İşlemlerinde Performans İpuçları

Büyük veri setleri ile çalışırken Excel işlemlerinin performansı oldukça önemlidir. Aşağıdaki yöntemler performansı ciddi şekilde artırabilir.

  1. Tek tek hücre yazmak yerine LoadFromCollection kullanın
  2. AutoFit işlemini yalnızca gerekli durumlarda kullanın
  3. Büyük veri setlerinde streaming yöntemlerini tercih edin
  4. Gereksiz stil işlemlerinden kaçının
Yöntem Performans
Tek tek hücre yazma Düşük
LoadFromCollection Yüksek
Bulk veri aktarımı Çok yüksek

EPPlus Kullanım Alanları

C# Excel veri transferi birçok farklı yazılım projesinde kullanılmaktadır.

  • Finans raporlama sistemleri
  • CRM yazılımları
  • ERP sistemleri
  • Stok yönetimi uygulamaları
  • Veri analiz araçları
Kullanım Açıklama
Raporlama Verilerin Excel raporuna aktarılması
Veri aktarımı Excel ile veri import işlemleri
Toplu veri yükleme Excel üzerinden veri sisteme ekleme
Veri analizi Excel üzerinden veri inceleme

Sıkça Sorulan Sorular

EPPlus nedir?

EPPlus, .NET uygulamalarında Excel dosyaları oluşturmayı, düzenlemeyi ve veri transferi yapmayı sağlayan bir kütüphanedir.

C# ile Excel’e veri yazılabilir mi?

Evet. EPPlus kütüphanesi kullanılarak List, DataTable veya nesne koleksiyonları Excel dosyasına kolayca aktarılabilir.

EPPlus ile Excel’den veri okunabilir mi?

Evet. ExcelPackage kullanılarak Excel dosyası açılır ve Worksheet üzerinden hücre verileri okunabilir.

EPPlus ücretsiz mi?

EPPlus bazı sürümlerinde ticari kullanım için lisans gerektirebilir. Ancak bireysel ve eğitim amaçlı kullanım için ücretsiz lisans seçenekleri bulunmaktadır.

EPPlus hangi Excel formatını destekler?

EPPlus temel olarak .xlsx formatındaki Excel dosyaları ile çalışır.