C#

C# Excel’den DataGridView’e Aktarma

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda bir Excel dosyasındaki verileri DataGridView üzerinde aktarmayı anlatacağım. Hadi başlayalım !

Bildiğiniz üzere Windows’taki Excel ile C#’taki DataGridView’in yapısı birbirine çok benziyor. Her ikisinde de satır, sütun ve hücreler bulunmakta fakat Excel yerleşik bir uygulama iken DataGridView C# içindeki bir component. Ayrıca C#’ın doğrudan bir Excel dosyası okuma desteği bulunmuyor. Ya bilgisayarınızda kurulu olan Excel’i C# projenize referans olarak göstereceksiniz yada bu işleri yapan 3. parti kütüphane veya kodları kullanacaksınız. Bilgisayarınızda kurulu olan Excel’i C# projenize referans olarak gösterdiğinizde örneğin siz Office 16’yı referans gösterirseniz uygulamayı kullanacak olan kişinin bilgisayarında da Office 16 olması gerekiyor, aksi halde Excel dosyalarını okuyamıyorsunuz. Excel dosyaları üzerinde işlem yapmayı sağlayan bir çok 3. parti kütüphane var fakat benim en çok kullandığım IronXL. Bu kütüphane ile kendi bilgisayarınızda Excel yüklü olmasa bile Excel dosyalarını okuyabiliyor ve hatta Excel dosyalarına veri yazabiliyorsunuz. Ayrıca bu kütüphane ile Excel dosyası şifreleme, hücrelere veri yazma, Excel dosyasını HTML olarak dışarı aktarma, grafikler oluşturma, hücreler arasında formül çalıştırma gibi bir çok işlemi yapabiliyorsunuz. Her birini zaman buldukça yazacağım fakat şu an sadece bir Excel dosyasındaki verileri form üzerinde bulunan DataGridView’e aktarmayı anlatacağım.

Öncelikle bir tane Windows Form App projesi oluşturalım ve IronXL kütüphanesini projemize referans gösterelim. Kütüphaneyi projeye referans göstermek için iki yolumuz var; ya kütüphane dosyalarını (DLL, XML, PDB gibi dosyalar) elle projeye referans olarak ekleyeceksiniz yada Nuget gibi bir paket yöneticisi kullanacaksınız. Benim tavsiyem Nuget kullanmak olur. Çünkü kütüphaneyi Nuget ile projeye eklerseniz Nuget proje ana dizininde packages adında bir tane klasör oluşturacak ve projeye eklediğiniz tüm paketleri buraya indirecektir. Siz bu packages klasörünü silseniz bile projeyi açtığınız zaman otomatik olarak eksik olan paketler Nuget tarafından tekrardan indirilecek ve projeye eklenecektir.

Bir kütüphaneyi Nuget ile projeye eklemek için Visual Studio’nun üstteki menüsünden Tools > Library Package Manager > Package Manager Console adımlarını izleyerek Visual Studio içerisinde bir tane terminalin açılmasını sağlamanız gerekiyor. Bu terminal üzerinden Nuget komutlarını yazabiliyorsunuz. Projeye kütüphane eklemek için install-package paket_adı -Version versiyon_adı şeklinde bir komut girmeniz gerekiyor. Bu komut içerisinde -Version versiyon_adı kısmı zorunlu değil, yazarsanız kütüphanenin o versiyonunu yükler, yazmazsanız son versiyonu yükler. Biz IronXL paketini kullanacağız fakat paketin Nuget’teki ismi IronXL.Excel, yani bu paketi projeye eklemek için terminal üzerinden şöyle bir komut girmemiz gerekiyor;

install-package IronXL.Excel

Bu komutu yazıp Enter tuşuna bastıktan sonra paket proje ana dizininde oluşturulan packages klasörüne indirilecek ve projeye eklenecektir.

Bu işlemin ardından formumuza bir tane DataGridView bir tane Button ve bir tane de OpenFileDialog ekleyelim. Button’a tıklandığında OpenFileDialog ile bir tane Excel dosyası seçtirecek ve bu dosyadaki verileri DataGridView’de göstereceğiz. Bu işlemlerin ardından form tasarımımız şu şekilde olacaktır.

csharp excelden datagridviewe aktarma 1
Form Tasarımı

Ayrıca OpenFileDialog ile sadece Excel dosyalarının seçilebilmesi için dosya filtrelemesi ekleyelim. Bunun için formun Load eventine geçip (form üzerinde boş bir yere çift tıklayarak yada formu seçip Properties penceresinden Events kısmına geçerek Load satırına çift tıklayarak açabilirsiniz) şöyle bir kod yazmamız yeterli olacaktır.

openFileDialog1.Filter = "Excel Dosyaları|*.xlsx;*.xls;*.csv";

Bu kod satırıyla OpenFileDialog içerisinden sadece .xlsx, .csv ve .xls uzantılı dosyalar yani Excel dosyaları seçilebilecektir. Artık Button’un Click eventini oluşturup içerisinde OpenFileDialog’u açtırıp sonrasında Excel’deki verileri DataGridView üzerinde gösterebiliriz. Button’un Click eventini Button’a çift tıklayarak yada Button’u seçip Properties penceresinden Events kısmına geçerek Click satırına çift tıklayarak oluşturabilirsiniz.

Bir kullanıcı olarak biz, bir Excel dosyasını açıp okumak için öncelikle Excel dosyasını açmalı ve sonrasında worksheet adını verdiğimiz sayfalara geçiş yapmamız gerekiyor. Aynı şekilde IronXL kütüphanesi ile bir Excel dosyasını okumak için de önce Excel’i açmalı ve sonrasında worksheeti seçerek okuma yapmamız gerekiyor. Bir Excel dosyasını okumak için de WorkBook sınıfı altındaki Load() fonksiyonu kullanılıyor. Bu fonksiyon Excel dosyasının yolunu gösteren string tipte bir tane parametre alıyor ve geriye WorkBook nesnesi döndürüyor. Göndereceğimiz parametre de kullanıcının seçtiği dosyanın yolu olacak, bu sayede kullanıcının seçtiği dosya okunacaktır. Kullanıcı istediği dosyayı OpenFileDialog ile seçecekti. OpenFileDialog ile seçilen dosyanın yolunu almak için OpenFileDialog nesnesi altındaki FileName propertysi kullanılıyor. Bu property seçilen dosyanın yolunu kök dizinden (Windows için C:/) veriyor. Yani örneğin c:/users/kullanıcı/desktop/excel.xls gibi bir yol oluşturuyor.

WorkBook yani Excel dosyasını açtık, sıra geldi WorkSheet seçmeye. Bunun için de WorkBook nesnesi altında bulunan WorkSheets propertisini kullanıyoruz ve bu property WorksheetsCollection sınıfı nesnesi yani bir liste. Biz aynı anda sadece bir tane worksheet içinden okuma yapabildiğimiz için worksheet numarasını tıpkı bir dizi yada liste içerisinden index numarası vererek istediğimiz elemana ulaşmada yaptığımız gibi sıfırdan başlayarak (ilk sayfanın indexi 0 kabul edilir) worksheet numarasını köşeli parantezler içinde vermemiz gerekiyor. Bu sayede hedef worksheete ulaşmış olacağız. WorkSheets bir liste idi, biz index numarasıyla doğrudan bir worksheet ulaştık ve veriler okumaya hazır. IronXL ile bir worksheette bulunan verileri DataTable tipine çevirebiliyoruz, daha doğrusu DataTable içerisine doldurabiliyoruz. Bunun içinde worksheet altında bulunan ToDataTable() fonksiyonunu kullanacağız. Bu fonksiyon useFirsRowAsColumnNames adında bool tipte bir tane parametre istiyor fakat göndermek zorunda değiliz, ki zaten default değeri false olarak belirlenmiş. Ne işe yarıyor bu parametre derseniz, bu parametreyi true olarak gönderirseniz Excel dosyasının ilk satırını DataGridView’in satır başlıkları olarak almayı sağlıyor. Yani biliyorsunuz ki DataGridView satır ve sütunlardan oluşuyor ve her bir sütunun başlığı olabiliyor. Aynı şey Excel’de de var, yani Excel’de de başlıklar genelde ilk satırda oluyor. İşte sizde Excel dosyasının ilk satırını DataGridView satır başlıkları olarak kullanmak isterseniz bu parametreyi true olarak gönderebilirsiniz. false gönderir yada hiçbir şey göndermezseniz (o zamanda false olarak işlem yapılır) Excel’in ilk satırını da DataGridView’e sütun başlıkları olarak değil veri olarak ekler.

Excel dosyasını bu şekilde DataTable’a çevirdik, e biliyorsunuz ki DataTable’daki verileri doğrudan DataGridView’e aktarabiliyoruz. Bunun içinde DataGridView nesnesinin DataSource propertisini kullanıyoruz. Bu propertye atadığımız DataTable içindeki tüm veriler doğrudan DataGridView’e aktarılıyor. Ki aslında DataTable’da tıpkı DataGridView gibi satır ve sütunlardan oluşuyor fakat DataGridView gibi form üzerine eklenebilen bir yapısı yok, bellekte oluşturuluyor ve işlem yapılıyor. Sonradan DataTable içerisindeki verileri isterseniz DataGridView’e aktarabiliyorsunuz.

E bu kadar sözel yazdık, bide C# kodunu yazalım;

dataGridView1.DataSource = WorkBook.Load(openFileDialog1.FileName).WorkSheets[0].ToDataTable();

Excel dosyasını okuduk fakat OpenFileDialog ile dosyanın seçilip seçilmediğini kontrol etmemiz gerekiyor. Sonuçta OpenFileDialog ile seçilen dosyayı okuyacak ve DataGridView üzerinde göstereceğiz. Fakat OpenFileDialog açıldığında kullanıcının dosya seçip seçmediğini de kontrol etmemiz gerek, dosya seçmeyi iptal ederse bizim kodumuz hata verecektir. Bunun önlemek için sadece dosya seçildiği durumlarda bu kodun çalışmasını sağlayalım. OpenFileDialog ile dosya seçtirme alanı açmak için OpenFileDialog nesnesi altındaki ShowDialog() fonksiyonunu kullanıyoruz. Bu fonksiyon herhangi bir parametre almıyor ve geriye DialogResult nesnesi döndürüyor. İşte bu DialogResult nesnesi ile dosya seçilip seçilmediğini kontrol edebiliyoruz. Aslında doğrudan dosya seçildi mi seçilmedi mi kontrolü yapılamıyor fakat biliyorsunuz ki OpenFileDialog ile açılan popupta Tamam ve Iptal butonları bulunmakta. Bu butonlardan Tamam’a basıldığında geriye döndürülen DialogResult nesnesi OK, Iptal’e basıldığında Cancel olmakta. İşte bizde geriye döndürülen DialogResult nesnesini kontrol edip OK ise az önce yazdığımız kodları çalıştırsak tamda istediğimiz şeye ulaşmış oluruz. Form açılır, kullanıcı Button’a basar, OpenFileDialog penceresi açılır, kullanıcı dosyayı seçer, Excel dosyası okunur, DataGridView’de gösterilir. Kullanıcı dosyayı seçmezse Excel dosyası okunmaz ve dolayısıyla DataGridView’de herhangi bir şey görünmez. İşte bu teorinin kodu tam olarak şöyle;

if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
    dataGridView1.DataSource = WorkBook.Load(openFileDialog1.FileName).WorkSheets[0].ToDataTable();
}

Evet IronXL kütüphanesi ile Excel dosyasındaki verileri DataGridView üzerinde gösterme bu kadar basit 🙂 Yazdığımız kodları daha düzenli olması için aşağıya toplu olarak bırakıyorum;

private void Form1_Load(object sender, EventArgs e)
{
    openFileDialog1.Filter = "Excel Files|*.xlsx;*.xls;*.csv";
}

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        dataGridView1.DataSource = WorkBook.Load(openFileDialog1.FileName).WorkSheets[0].ToDataTable();
    }
}

Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 2 Ortalama: 3.5]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu