23 Aralık 2011 Cuma

C# ile Excel'e veri aktarmak

Bu uygulamamız özellikle iş yerinde rapor uretimini çok yapan arkadaşların fazlaca uzerinde duracağı bir program.C# ile access ten aldıgımız verileri excel'e atacağız.Bunu yaparken en basit haliyle yaptım siz daha karmaşık ve hızlı olanların algoritmasını geliştirebilirsiniz.
Studio da bir acces bağlantısı yapıp daha sonra bağlantı konfigurasyonlarını yaparsak geriye bişey kalmaz.Microsoft excel'i MxM lik bir matris olarak kullanmanıza olanak verir.Fakat daha oncesinde bişey yapmanız gerekir o da addreference ile excel nesnesinin studio ya dahil edilmesidir.Fakat bende office 2003 var ve ben de excel11 referansı hata verdi ve çalışmadı.Excel5 referansı hata vermemekle beraber istediğim özellikleri barındırmıyordu.Ben işi başka bir office den aldıgım referansla çözdüm."interop.excel.dll"
olan bu obje benim işimiz çözdü.Fakat bir de yine studiodan office.core nesnesini eklemliyiz.Yanında VBIDE referansı ekler...

Biz şimdi refernce eklemeyi gösterelim ---->bknz.Resim


referansımıza gelince onuda şöyle seçecez bknz.Resim ---->
Browse den İnterop.Excel nesnesini ekleyeceğiz.Diğerlerini ister benim vereceğim project klasorunun içinden interop.Excel gibi ekleyebilirsiniz isterseniz de "com" seçeneğinden ekleyebilirsiniz...
Şimdi sıra kodlarda

İş çok basit access'e eklediğimiz verileri kolon kolon okuyup Excel nesnesine ait tanımladıgımız referansla tablo.cells[i,2]
şeklinde değerleri excel'e atacağız bunu donguyle de yaparsak bir otomasyon elde etmiş oluruz:)
işte buyrzun excel raporlaması benim elimde olan bir veritabanının müşteri bilgilerini excel ilE raporladık...

public void excel()
{
Excel.Application ExcelNesnesi = new Excel.Application();
if (ExcelNesnesi == null)
{
MessageBox.Show("Excel Cort!");
}

ExcelNesnesi.Workbooks.Add(true);
ExcelNesnesi.Visible = true;
Excel.Worksheet tablo;
tablo = (Excel.Worksheet)ExcelNesnesi.ActiveSheet;
if (Convert.ToBoolean(oleDbConnection1.State) != true)
{
oleDbConnection1.Open();
}
oleDbCommand1.Connection = oleDbConnection1;
oleDbCommand1.CommandText = "SELECT Ad, Soyad, [Ev Telefon], [Cep Telefon], Adres, [Müşteri No]" +
"FROM Musteri";
OleDbDataReader oku;
int i = 1;
oku = oleDbCommand1.ExecuteReader();
tablo.Cells[i, 1] = "Musteriler";

while (oku.Read())
{
i++;
tablo.Cells[i, 1] = Convert.ToString(oku.GetString(0).Trim().ToString());


}
oku.Close();
i = 2;

oku = oleDbCommand1.ExecuteReader();
while (oku.Read())
{
tablo.Cells[i, 2] = oku.GetString(1);
i++;
}
oku.Close();
i = 2;
oku = oleDbCommand1.ExecuteReader();
while (oku.Read())
{
tablo.Cells[i, 3] = oku.GetString(2);
i++;
}
oku.Close();
i = 2;
oku = oleDbCommand1.ExecuteReader();
while (oku.Read())
{
tablo.Cells[i, 4] = oku.GetString(3);
i++;
}
oku.Close();
i = 2;
oku = oleDbCommand1.ExecuteReader();
while (oku.Read())
{
tablo.Cells[i, 5] = oku.GetString(4);
i++;

}
oku.Close();
i = 2;
oku = oleDbCommand1.ExecuteReader();
while (oku.Read())
{
tablo.Cells[i, 6] = oku.GetInt32(5);
i++;
}


}
siz range sınıfı ya da daha değişik yollarla daha hızlı ve kolayını yapabilirsiniz benden bu kadar yorumlarınızı bekleriz...Kolay gelsin

basit bir excel raporlaması yapılmış oldu.Kendi access dosyanıza göre configüre edip çalıştırabilirsiniz...

0 yorum:

Yorum Gönder