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...