C# Excel dosyasından DataGridView nesnesine veri aktarmak

Elimizde bir excel dosyası var ve projemizde bu dosyanın içeriğine erişmek isteyebiliriz. Bu durumda OleDbConnection sınıfı ile ilgili excel dosyasına erişip istediğimiz sayfasından excelin verilerini DataGridView nesnesine aktarabiliriz. Bu örenkte ben DataGridView nesnesi tercih ettim. Sizler başka tablo nesnelerine de pek tabi veri alabilirsiniz. Örneğin ListView vb…

İlk işimiz OpenFileDialog penceresi açtırıp ilgili excel dosyasını seçtirmek olsun. Bunun için aşağıda ki kodları kullanacağız.


OpenFileDialog file = new OpenFileDialog();
file.Filter = "Excel Dosyası |*.xlsx| Excel Dosyası|*.xls";
file.FilterIndex = 1;
file.RestoreDirectory = true;
file.CheckFileExists = false;
file.Title = "Aktarım Yapılacak Excel Dosyası Seçiniz..";
file.Multiselect = false; //Burası önemli. Multiselecti pasif yapmamız lazım. Aksi halde birden çok seçim işimize gelmeyecektir. Biz bir adet dosya seçeceğiz.
string DosyaYolu = "";

if (file.ShowDialog() == DialogResult.OK)
{
DosyaYolu = file.FileName;
}

 

Yukarıda ki kodlar yardımı ile excel dosyamızı seçmiş olduk ve seçilen excel dosyasının dosya yolunu da elde etmiş olduk. Peki bu dosya yolu ne işe yarayacak derseniz; bu dosya yolu ile OleDbConnection bağlantısı gerçekleştireceğiz. Hadi yapalım şu işi.

Not: OleDbConnection nesnesi türetmek için using System.Data ve using System.Data.OleDb yapmayı unutmayın.


OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+DosyaYolu+"; Extended Properties='Excel 12.0 xml;HDR=YES;'");
baglanti.Open();
DataTable abc = baglanti.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string ExcelSheetName = abc.Rows[0]["Table_Name"].ToString();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM ["+ExcelSheetName+"]", baglanti);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = "";
dataGridView1.Columns.Clear();
dataGridView1.DataSource = dt.DefaultView;
baglanti.Close();
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

Not:Provider olarak Microsoft.ACE.OLEDB.12.0 kullandım. Eğer sizde çalışmaz ise muhtemelen AccesDatabaseEngine kurmanız gerekmektedir. Bunun için Tıklayın.

 

Fark ettiyseniz  “string ExcelSheetName = abc.Rows[0][“Table_Name”].ToString();” kod satırında, “Rows[0]” diyerek, “GetOleDbSchemaTable” ile getirmiş olduğum excel sayfalarından ilkini seçmiş oldum. Burada ilgili excelin hangi sayfasını getireceğimi bildiğim için böyle yapmış oldum. Dilerseniz “GetOleDbSchemaTable” ile dönen sayfa isimlerini ayrı bir dialog penceresine yazdırıp onlar arasından bir seçim yaptırarak da istediğiniz excel dosyasının sayfasını aktarmak mümkün. Bu tamamen sizin tasarımınıza kalmış bir seçenek.

 

Paylaşmayı unutmayın!