Merhaba arkadaşlar. Bu dersimde C# Çoklu Excel Dosyası Okuma işlemini anlatmaya çalışacağım. Bu konu mail ortamında bir soru olarak gelmişti. Soruyu soran arkadaşıma verdiğim tavsiye sonrasında sorunu çözdüğüne dair geri dönüş aldım. Bende bu konuyu bir ders olarak eklemek istedim.
Gelen soru şöyleydi;
Bir klasör içerisinde toplanan 300-350 kadar Excel dosyasını, Datatable’a alt alta dökebilir miyiz? Böyle bir şey mümkün mü acaba ?
Sitemi takip eden arkadaşlar biliyordur. Sitemde bir C# Eğitim Seti var. Eklediğim tüm dersleri bu eğitim seti içerisinde kategorilere bölerek veriyorum. Şuanda, bu ders ile birlikte 179 adet ders olacak. Bir çok ders, projelerinizde direk olarak kullanabileceğiniz konuları içeren yazılardır. Sitemi yeni bulduysanız mutlaka bu eğitim setine gidip dersler listesine tek tek göz atmanızı tavsiye ederim. Eğer aradığınız konu yok ise bana mail atın ve en kısa sürede o konuyu ders olarak ekleyeceğim. Elbette ilk olarak sorununuzu çözdüğünüzden emin olacağım.
C# Çoklu Excel Dosyası Okuma
Dediğim gibi bu konu hakkında bir soru geldi ve bende bu dersi eklemek istedim. Öncelikle burada yapmamız gereken şey C# Excelden Veri Okuma ve DataTable’a Yükleme – XLSX buradaki dersime bir göz atmaktır. Bu dersimde excel dosyasından veri okumayı bulabilirsiniz.
Dosyalar XLS ise Githup projemdeki 20 numaralı ders olan C# Excel OLEDB Bağlantı ve Veri Okuma – Class dersime bakabilirsiniz. Buraya tıklayarak projeye ulaşabilirsiniz.
İlk olarak tek bir dosyayı okumayı başarı ile yapacağız. Bir dosyayı başarı ile okuduktan sonra okumak istediğimiz diğer tüm excelleri, başarı ile okuduğumuz exceldeki gibi düzenleyeceğiz. Yani kolon sıraları ve veri tipleri aynı olmak zorunda. Bir excelde 20 kolon diğerinde 25 kolon var ise fazlalık 5 kolon okunmayacaktır. Bir excelde 20 kolon diğerinde 15 kolon var ise eksik olan 5 kolon yüzünden hata verecektir. Buna dikkat ediyoruz.
Verdiğim linkteki gibi okumayı yaptıktan sonra okuma kodlarımızı bir metod içerisine alıyoruz. Bu metodumuz excel yolu adında bir parametre alacak.
private void ExcelOku(string excelDosyaYolu) { //Excel okuma kodları }
Excel okuma kodlarımızda okunacak excel’in yolunu elle yazmayıp parametreden alacağız. Bu kısım çok önemlidir.
C# FolderBrowserDialog Kullanımı – Örnekli Anlatım Buradaki yazımı inceleyin.
Projemize bir FolderBrowserDialog ekleyeceğiz. Bu nesne bize bir klasör yolu seçmemize olanak tanır. Excel dosyalarının olduğu klasörü seçeceğiz. Klasörün yolunu aldıktan sonra bu klasördeki dosya sayısını alacağız.
C# Çoklu Excel Dosyası Okuma
Buradan sonrasını Github projemdeki 20 Numaralı ders olan C# Excel OLEDB Bağlantı ve Veri Okuma – Class dersim üzerinden devam edeceğim. Hatta github projemdeki orjinal dersi güncelleyerek, hem tekli hemde çoklu okuma olmuş olacak. Sizler içinde elinizin altında hazır %100 çalışan kodlar yer almış olacak. Ancak öncelikle yukarıda verdiğim dersleri mutlaka inceleyin.
Şimdi formuma iki buton ve bir listbox daha ekledim. Listbox’ta seçilen klasördeki xls uzantılı dosyaların listesinin tutacağız. Butonlardan birisi klasör seçme diğeri ise seçilen dosyaları okumak olacak.
Klasörden Çoklu Seç Butonu Click Eventi’ne geliyoruz. Directory sınıfını kullanmak için Aşağıdaki NameSpace ‘in eklenmesi gerekmektedir.
C# Foreach Döngüsü Kullanımı dersi için tıklayabilirsiniz.
using System.IO;
private void btn_klasorden_coklu_sec_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { string[] dosyalar = Directory.GetFiles(fbd.SelectedPath); foreach (string dosya in dosyalar) { if (dosya.EndsWith(".xls")) listBox1.Items.Add(dosya); } } }
Seçtiğimiz klasördeki xls uzantılı dosyaların hepsini ListBox’a yazdık.
Seçilenleri Oku Butonunun Click Eventi’ne geliyoruz.
DataSet ds = new DataSet(); DataTable dt = new DataTable(); for (int i = 0; i < listBox1.Items.Count; i++) { ExcelBaglanOku.ExcelYol = listBox1.Items[i].ToString(); dt = ExcelBaglanOku.ExcelOku(); ds.Tables.Add(dt); } DataTable dtAll = ds.Tables[0].Copy(); for (var i = 1; i < ds.Tables.Count; i++) { dtAll.Merge(ds.Tables[i]); } dataGridView1.AutoGenerateColumns = true; dataGridView1.DataSource = dtAll;
C# For Döngüsü Kullanımı ve İç İçe For Döngüleri dersim için tıklayabilirsiniz.
- Burada öncelikle bir DataSet tanımlıyoruz. Okuduğumuz her bir excel dosyasının içeriği bir DataTable’ye atacağız. Bu DataTable’ları da DataSet’e yükleyeceğiz.
- ListBox’a yüklediğimiz yollar şimdi kullanacağız. For döngüsü ile ListBox’taki nesneler ile döngüye başlayacağız.
- ExcelBaglanOku.ExcelYol kısmı, bu ders için kullandığım Excel’e bağlanma ve içeriğini okuma kodlarının olduğu class’ta yer alan public bir değişkendir. ListBox’tan aldığımız yolu bu değişkene atıyoruz.
- Tanımladığımız DataTable’a okuduğumuz verileri yüklüyoruz. Burada yine class’ta yer alan DataTable türünde değer dönen metodumuzu kullanıyoruz.
- Doldurduğumuz DataTable’ı da DataSet’e yüklüyoruz.
- Burada kaç tane Excel dosyası var ise o kadar sayıda DataTable olacak ve hepsi de DataSet’e eklenecek. Daha sonra bu tabloları birleştireceğiz.
- Tüm tabloları birleştireceğimiz ana DataTable tanımlaması yapıyoruz.
- For döngüsü ile DataSet içindeki tablo kadar döneceğiz.
- DataSet’teki tabloları tek tek dtAll adlı DataTable’ye ekliyoruz. Merge, birleştirme, ucuna ekleme anlamlarına geliyor.
- DataGrieView nesnesinin otomatik kolon oluşturma özelliğini True yapıyoruz
- DataTable’nin içeriğini girdde gösteriyoruz.
Exceller;
Excellerdeki veriler;
Gördüğünüz gibi excellerde sıra numaraları ve tarihler sıralı gidiyor. Şimdi programımızı çalıştıralım ve görelim. Daha net belli olması için excellere bir kolon daha ekledim ve hangi excel olduklarını yazdım.
Gördüğünüz gibi arkadaşlar. 3 Excel dosyası da başarılı bir şekilde ard arda okundu ve gridde gösterildi.
C# Okunanları Veri Tabanına Kayıt Etmek
Burada farklı bir yöntem daha vermek istiyorum. Şimdi Excelleri okuyup DataTable’a doldurduğumuz kısımda DataTable’ları DataSet’e eklemek yerine direk veritabanına kayıt edebilirsiniz. Burada nasıl bir yöntem kullanacağınız size kalmış bir durum. Verileri kaydettikten sonra tek bir sorgu ile veritabanından çekebilir gridde gösterebilirsiniz.
C# Çoklu Excel Dosyası Okumak dersimde bu kadar arkadaşlar. Umarım sizler için faydalı bir ders olmuştur ve umarım yeterince açık bir şekilde anlatabilmişimdir. Artık gerisi sizde.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Hiçbir yerde bulamayacağınız kaliteli dersler için Takipte ve Sağlıcakla kalın.