Makale Özeti

ADO.Net ile çok kolay bir şekilde MS SQL, MS Access, Oracle ve benzeri çok gelişmiş DBMSlere nasıl bağlanacagımızı ve verileri işleyebilecegimizi hepimiz eminim çok iyi biliyoruz. Peki ya bir çok işletmenin hala kullandıgı Excel tablolarına nasıl baglanacagız ve oradaki gerekli verileri nasıl işleyecegiz? İşte bu makalemizin konusu , C# ile Excel tablolarındaki verilere erişmek.

Makale

Excel dosyalarına aynen bir DB gibi erişmek, ADO.Net ile kolayca mümkün oluyor. Pek bir alternatif olarak sayılmasada, çogu zaman ihtiyaç duyula bilmektedir. ADO.Net ile bu işlemi gerçekleştirmek, 2 aşamada mümkün oluyor.


1. Her hangi bir Excel dosyasındaki belirledigimiz bir hücre grubunu ilk olarak tanımlamamız gerekiyor. ADO.Net bu tanımladıgımız alanlari sanki bir veri tablosu gibi algılayacak. Benim örnek oluşturdugum tablo aşagıdaki gibidir


Tablomuzu oluşturduktan sonra, "Insert -> Names -> Define" ile üzerinde çalışacagımız tabloyu ve verilerini oluşturacagız.

 

"Define" kısmında gelen pencerede, ben "isimler" diye bir define tanımladim (yani tablomun adı "isimler"), "Add" tuşunana basmadan önce aşagıdaki "Refers to:" kısmına hangi hücreleri kapsadıgını seçmemiz gerekmektedir.


        Tıpkı aşagıdaki gibi, ilgili alanı seçiyoruz.
 

                       


A1 den B7 e kadarlık hücre blogunun hepsini "isimler" olarak tanımladık. Artık kaydedip cıkabiliriz.

2. Bu kısımda ise C# da erişim yolunu görecegiz;

İlk olarak using System.Data.OleDb; uzay ismini eklemeyi unutmuyoruz. Ben aşagıdaki gibi oldukca basit bir form hazırladım, bir listview ve bir buttondan oluşuyor.

private void btn_XLSden_Click(object sender, System.EventArgs e)
{
       //connection stringimiz
       //bin klasorumuzn icindeki derledigimiz EXE ile aynı klasorun iceresinde
       string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Deneme.XLS;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";

       // EXCEL dosyamızı açıyoruz ve okuyoruz
       OleDbConnection conn = new OleDbConnection(connstr);
       conn.Open();
             //isimler tablosu aslında Excel dosyamızda define ile tanimladigimiz alanin ismi
             OleDbCommand cmd = new OleDbCommand("Select * From isimler",conn);
             OleDbDataReader dtr = cmd.ExecuteReader();

             //eger tablo bos degil ise
             //kolon isimlerini alıp listview in kolonlarını olusturuyoruz
             for(int i=0;i<=dtr.FieldCount-1;++i)
             listview1.Columns.Add(dtr.GetName(i),65*(i+1),HorizontalAlignment.Center); 

             //tek tek okuyoruz ve listviewe ekliyoruz
             ListViewItem satir = new ListViewItem();
             while(dtr.Read())
                    {
                           satir = listview1.Items.Add(dtr[0].ToString());
                           satir.SubItems.Add(dtr[1].ToString());
                    }
             //sonlandırıyoruz
              dtr.Close();
       conn.Close();
}

Fazladan bir açıklama yapmaya gerek duymuyorum, gerekli açıklamaları comment olararak kodlarla birlikte yaptım. Gördügünüz gibi oldukca basit, diger işlemleride sıradan ADO.Net commandları ile gerçekleştirebilirsiniz.

ConnectionString dogru yapıldıgı anda hiç bir sorunla karşılaşmazsınız.
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Deneme.XLS;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""

Buradaki "Deneme.XLS"in yeri farklı bir klasorde ise c:\\denemeler\\deneme.XLS gibi yerini gösterebilirsiniz. Hepinize çalışmalarınızda başarılar diliyorum, kolay gelsin...

Kaynak Kodlar