C# Excel’den Veri Okuma


excell

 

Merhaba arkadaşlar, Microsoft Teknolojileri kategorimdeki yeni yazımı yazmaktayım. Bu yazımda sizlere Excel’den veri okuma işlemini anlatacağım. Güzel açıklamalarından dolayı ve bu konuda beni aydınlattığı için Mehmet AKBULUT bey’e teşekkürlerimi sunuyorum. http://www.mehmetakbulut.net/2011/08/c-ile-excelden-veri-okuma.html

İşlerin nasıl yürüyeceğine gelecek olursak; access veritabanı kullanımındakiyle aynı mantıkla hareket edeceğiz. Tablolarımız excel dosyası içerisindeki sayfalar olacak. Tabloların içerisinde A,B,C… gibi sütunlar ise bizim veri alanlarımız olacaktır.

Form aşağıdaki gibidir. Excel Dosyasını Seçiniz butonu ile ilişkilendirdiğim OpenFileDialog aracılığıyla Excell dosyasının yerini belirtiyoruz bu bizim dosya yolumuz oluyor. İşin özüne (kodlara ) gelecek olursak;

excelekran1

openFileDialog1.ShowDialog();
string dosyayolu = openFileDialog1.FileName;
OleDbConnection bag = new OleDbConnection(“Provider=Microsoft.ACE.OLEDB.12.0; Data Source=”+dosyayolu+”; Extended Properties=Excel 12.0″);
bag.Open();
string komut=”Select * from [YoneticiIsTakibi$]“;
OleDbCommand cmd=new OleDbCommand(komut,bag);
OleDbDataAdapter da = new OleDbDataAdapter(komut,bag);
OleDbDataReader dr=cmd.ExecuteReader();
DataTable dt = new DataTable();
da.Fill(dt);
while (dr.Read())
{
lbldeneme.Text = dr["F3"].ToString();
}
excelldatagrid.DataSource = dt;

Yukarıda While döngüsü içerisinde de label içerisine excel içindeki F3 sütununa ait en sonda bulunan veriyi yazdırdım. Siz bu döngü içerisine sql server için bir ekleme fonksiyonu yazıp bu datareader’ı sql sorgusu içine gömerseniz, kodunuz sql server içerisine doğrudan yazma işlemini gerçekleştirecektir. Bundan farklı olarak benim yapacağım şekilde de yapabilirsiniz. Şöyle ki, excel butonu ile verileri datagrid’e alıp daha sonra başka bir buton vasıtasıyla datatable içerisindeki verilerin alanlara göre seçilip veritabanına kopyalanmasını sağlayabilirsiniz. Yapabilecekleriniz yanlızca beyniniz ve hayal gücünüzle sınırlı. Şuna dikkat etmeyi unutmayın, her excel dosyası stabil (tekdüze) değil. Boş olan satırları da veritabanına kaydetmenizin anlamı yok. Gerekli kontrolleri yaptıktan sonra veritabanına kayıt yapmanızı tavsiye ederim.

About these ads

9 responses to “C# Excel’den Veri Okuma

  1. selam;

    {
    lbldeneme.Text = dr["F3"].ToString();
    }

    bölümünde system.indexoutofrangeexception hatası veriyor.

    eğer bu kodu kullanmazsak veriler datagridview e geliyor.

    açıkçası çok ta gerekli birşey benim için, bir excel hücresindeki veriyi bir lable a yazdırmam gerek, yardımlarınızı rica ederim…

    tşk…

  2. The ‘Microsoft.ACE.OLEDB.12.0′ provider is not registered on the local machine. hatası alıyorum projeyi run edince. neden acaba?

    • Access versiyonunuz 2007 olmalıdır. 2007 ise de Ofis kurulumunu yaparken eksik kurulum yapmanızdan kaynaklanıyor olabilir.

      • Access kullanmıyorum. Sadece Excel’den C# ile veri çekmeye çalışıyorum. Bu halde neden bu hatayı alıyorum?

      • Pardon excel diyecektim. Excel’im hangi sürümünü kullanıyorsunuz? 2007 ise eksik kurulum yapmış olmanız muhtemeldir. Microsoft Ofis’i kaldırıp tüm seçenekler ile yeniden kurulum yapmanızı tavsiye ederim.

      • O halde bağlantı cümlesi OleDbConnection(“Provider=Microsoft.ACE.OLEDB.12.0; içerisinde bir hata var. Yukarıdaki bağlantı cümlesi 2007 içindir. 2010 ve 2012 için farklılık gösterebilir. Araştırıp doğru bağlantı cümlelerini girmeniz halinde çalışacaktır.

  3. Pardon excel diyecektim. Ofis kurulumunu yaparken eksik kurulum yapmış olabilirsiniz. Ofis’i kaldırıp tekrar kurulum yapın. Tüm paketleri de yükleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter picture

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s