Geçenlerde şirkette yazdığım bir uygulama için bugüne kadar bir Excel tablosunda tutulan binlerce kaydı veritabanına aktarmam gerekti. Uygulama C# ile yazılmış bir ASP.NET uygulamasıydı ve daha önce C# ile hiç Excel'den veri okumamıştım. Internette (Google'da da diyebiliriz) yaptığım kısa bir araştırmadan sonra bu aktarım işini en basit şekilde OleDb kullanıp veriyi SQL'den çeker gibi çekerek halledebileceğimi düşündüm. Ve haksız da çıkmadım...
Verinin Excel dosyasında düzenli bir şekilde tutulmuş olduğunu kabul edersek, yapacağımız iş oldukça basit. İşte gerekli olan kod:
SqlConnection con = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; " + "data source=C:\\Dosya.XLS;Extended Properties=Excel 8.0;");
SqlCommand command = new OleDbDataAdapter("select * from [Sheet1$]", con);
con.Open();
DataSet ds = new DataSet();
command.Fill(ds);
Bu kod sayesinde Dosya.XLS adlı dosyada bulunan her satır veriyi ds adlı DataSet instance'ımız içerisine atmış oluyoruz. Bu veriyi satır satır okumak için ise gene çok basit bir işlem yapacağız:
ds.Tables[0].Rows[0].ItemArray[1].ToString()
Yukarıdaki değer bize Excel doyasındaki ilk kaydın ilk hücresinin değerini verecek. Bir döngü içerisine koyarak tüm satırlardaki tüm hücrelerin değerlerine kokaylıkla ulaşabiliriz.