Kurumsal bir firmada çalışıyorsanız işinizin büyük bir kısmı excel üzerinde çalışmak oluyor (En azından bizde böyle ) Excel ile çalışmak kurumsal firmaların işine geliyor ve ister istemez bu durum yazılımcının excel üzerinde ki hakimiyetini arttırmasında biraz zorunluluk getiriyor. Excel deki düzenli veri tutulması macro atamaları ya da ona benzer fonksiyonel işlemleri bünyesinde barındıran excel in c# ile etkileşimide bir hayli kolay[!]
Hatırlarsanız birkaç yazı öncesinde OleDb nesnelerine bir giriş yapmıştık. Anlaşılır ve basit bir şekilde OleDb nesneleri ile Access veritabanına bağlanıp verileri getirmiştik. Önceki makalemde yazdığım gibi OleDb nesneleri ile farklı veri tabanlarına bağlanmak mümkün. Özellikle bağlantıda tercih edeceğimiz veri kaynağı ise excel olacak demiştik. Şu an söylediklerimde değişme olmadığını belirterek excel ile işlemler yaparkende OleDb nesnelerinden yararlanacağımızı söyleyebilirim. Excel ile işlemler yaparken dikkat etmemiz gereken önemli bir konu da excel e giden sorguların biraz farklı oluşu!
Fazla uzatmadan excelde işimize yarayacak bölümleri biraz tanıtayım. Aşağıda yer alan excel resmimizde bir kaç bölüm göreceğiz. Bu bölümleri mümkün olduğu kadar Access tarzı veritabanlarına benzetmeye çalışacağım. Her ne kadar ilk bakışta pek benzemiyor olsada ilerleyen zamanlarda eminim ki sizde hak vereceksiniz.
Örneğin Columnes denilen bölümü veritabanlarımızda oluşturduğumuz kolonlara benzetiyorum hep. Excel için üstte yer alan tanım niteliği taşıyacak ve biz bu bölümü sanki veritabanı tasarlarken hazırladığımız kolon adlarıymış gibi düşüneceğiz. Diğer bölüm Records yani kayıtlar. Bu bölümde en üstte yer alan 1 satırın altında düzenli şekilde yazılmış olan veriler olacak. Sanki bir tabloya veri eklermiş gibi yeni bir kayıt geldiğindede mevcut yazılmış son kaydın altına gelecek. Diğer bir bölüm ise Worksheets. Ben bu bölüme sayfa demek yerine tablo diyorum. Sanki bir veritabanında tablo yapar gibi excel de sayfa oluşturup, tablolar yerine sayfalara bağlanırsınız.!

Önizleme : resim 1
Tabi bu kadar bilgi yeterli değil. Örneğin Access te olduğu gibi veri kaynağımızın nerde olduğu bizi çok ilgilendiriyor. Yanı sıra Access te kullandığımız Microsoft.Jet.OleDb.4.0 sağlayıcısını değiştirmeden kullanmak gerekiyor. Neyse bu kadar ön bilgi şimdilik yeter. İlk olarak Excel den veri çekerek başlayalım. Proje için Windows Application seçimim devam etmekte. Web tabanlı çalışacaksanız değişen pek bir şey olmuyor merak etmeyin . Şimdi şöyle bir senaryomuz olsun. Bir adet listbox kontrolü, altında da verileri çekmek için bir adet buton koyuyorum. Butonumun click olayında gerekli excel ile bağlantıyı sağlayarak gelen verileri listbox içerisine yazdıracağım. Form tasarımım aşağıda yeralmaktadır. Pek uğraşmak istemedim siz dilediğiniz gibi tasarlayın.

Önizleme: resim 2
Formun design kısmı tamam şimdi ise butona basıldığında verilerin çekilmesini sağlayalım. Click event ının olduğu bölüme aşağıdaki kodları yazalım
Not: Excel dosyamızı yukarıda ki resim 1 de gözüktüğü gibi, xls (excel 2003) formatında ayarlayarak C:/ dizini altında oluşturduğumuz Excel adında ki klasör içine kaydettik.
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Excel/excel1.xls;Extended Properties=""Excel 8.0;HDR=YES;""");
OleDbCommand command = new OleDbCommand("select ID,City,Region from [Sayfa1$] where ID<>0", con);
con.Open();
OleDbDataReader dr = command.ExecuteReader();
while (dr.Read())
{
lstContent.Items.Add(string.Format("{0} - {1}", dr["ID"].ToString(), dr["City"].ToString()));
}
con.Close();
Klasik bir bağlantı kur, komut ver ve sonuçları alarak işlem yap mantığını kullandık.Dikkat ederseniz Connection kısmında Extended Properties diye bir kısım var. Bu kısım ile excel bağlantısı olduğu ve versiyonunu belirttik. WorkSheet yani tablo bölümünde ise [Sayfa1$] olarak kullandık. Gördüğünüz gibi kullanım sanki Access bağlantısı yapar gibi gerçekleşti,Programı çalıştırıp butona tıklarsak aşağıda ki gibi bir liste alırız.

Excel ile veri görüntüleme işi tamamdır. Devamında ki derslerde kaydet güncelle ve sil olayına değineceğiz
Sağlıcakla kalın;