Bu makalede projelerimizde Excel'i nasıl kullanacağımız işleyeceğiz.
Veritabanı uygulamalarında, verilerimizi Excel'e aktararak çıktı alma,
raporlama vs işlemlerinde Excel'i kullanabiliriz. Excel'i projelerimizde
kullanabilmemiz için öncelikle gerekli Library'i import etmemiz gerekmektedir.
Bir tane Windows Application açıp, proje ismine sağ tıklayarak Add Reference
seçeneğini tıklayınız. Açılan iletişim kutusunda COM sekmesine geçip Excel Object Library
seçeneğini seçip projenize ekleyin. Uygulamamızda Excel dosyası oluşturup,
üzerinde işlemler yapacağız. Aşağıdaki gibi bir form tasarlayın.
1.Şekil: Form tasarımı.
Öncelikle veritabanımızdaki
Users
tablosundaki verileri DataGridView'de görüntüleyeceğiz. Sonra bu değerleri bir
diziye aktaracak ve "Excel'e Aktar" butonuna tıkladığımızda bu dizi
ile verileri Excel'e aktaracağız. Öncelikle aşağıdaki tanımlamaları yapın.
string[,] dizi;
string[] Cname;
int satir, sutun;
Microsoft.Office.Interop.Excel.Application yeni = new
Microsoft.Office.Interop.Excel.Application();
|
"dizi" isimli iki boyutlu dizimizi DataSet'teki bilgileri tutmada
kullanacağız. "Cname" adlı diziyi ise DataSet'teki tablonun sutun
adlarını tutmada kullanacağız. Excel'e aktarırken ilk satır olarak sütun
isimlerini aktaracak sonra bir satır boşluk bırakıp verileri ekleyeceğiz.
"satir" ve "sutun" değişkenleri DataSet'teki tablonun satır
ve sütun sayılarını tutmaktadır. Verileri "dizi" isimli iki boyutlu
diziye aktarırken bu değerleri kullanacağız. Sonraki tanımlamamızda ise bir
Excel dosyası tanımladık. Şimdi formumuzun Load olayına aşağıdaki kodları
yazalım.
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection baglan = new
SqlConnection("server=localhost;database=bm;integrated
security=sspi");
SqlDataAdapter verial = new
SqlDataAdapter("select UserName,Password from users",baglan);
DataSet ds = new DataSet();
verial.Fill(ds);
satir=ds.Tables[0].Rows.Count;
sutun = ds.Tables[0].Columns.Count;
dizi= new string[satir,sutun];
for (int i = 0; i <
satir; i++)
{
for (int j = 0; j <
sutun; j++)
{
dizi[i,j]=Convert.ToString(ds.Tables[0].Rows[i][j]);
}
}
Cname = new string[sutun];
for (int k = 0; k <
sutun; k++)
{
Cname[k] = ds.Tables[0].Columns[k].ColumnName.ToString();
}
dataGridView1.DataSource = ds.Tables[0];
}
|
Veritabanında
Users
tablosundaki verileri çektik. Verileri iki for döngüsü kullanarak
"dizi" isimli iki boyutlu dizimize aktardık. Bir for döngüsü
kullanarak sütun isimlerini de elde ettik. Son olarak verileri DataGridView'de
görüntüledik. Şimdi verileri Excel'e aktarmaya geldi. "Excel'e Aktar"
butonunun Click olayına aşağıdaki kodları yazın.
private void button1_Click(object sender, EventArgs e)
{
yeni.Application.Workbooks.Add(true);
yeni.Visible = true;
Microsoft.Office.Interop.Excel.Worksheet sayfa
=(Microsoft.Office.Interop.Excel.Worksheet) yeni.ActiveSheet;
sayfa.Name = "Users";
for (int k = 1; k <=
sutun; k++)
{
sayfa.Cells[1, k] = Cname[k-1].ToString();
sayfa.Cells[2, k] = " ";
}
for (int i = 0; i
<satir; i++)
{
int sat=i+3;
for (int j = 0; j
<sutun; j++)
{
int sut=j+1;
sayfa.Cells[sat,sut]=dizi[i,j].ToString();
}
}
}
|
"yeni" adlı Excel uygulamamıza bir çalışma sayfası ekledik ve
Excel uygulamasını görünür yaptık. Bu haliyle uygulamayı çalıştırıp butona
tıklarsanız boş bir excel sayfası açılacaktır. Click olayında üçüncü satırda
bir çalışma sayfası tanımladık ve excel uygulamasında aktif olan çalışma
sayfasını üzerinde işlem yapmak için bu değişkene atadık. Öncelikle Worksheet
nesnesinin Name özelliğini kullanarak çalışma sayfamıza bir isim verdik.
Varsayılan olarak bu değer "Sayfa1" değerindedir. Excel satırları 1
indexinden başlar. Bildiğiniz gibi diziler 0 indexinden başlar. Bunu göz önüne
alarak for döngüsünü kuruyor ve sütun isimlerini ilk satıra ekliyoruz.
"sayfa.Cells[1, k] = Cname[k-1].ToString();" kod satırında, birinci
satırın k'inci sütununa Cname dizimizin (k-1)'inci elemanını atadık. Sonra
ikinci satırı "sayfa.Cells[2, k] = " "; " ifadesi ile boş
bıraktık. Şimdi verilerimizi eklemeye geçebiliriz. Hatırlar isek excel
sayfamızda ilk satıra sütun isimlerini eklemiştik. İkinci satırı boş bıraktık.
Verileri eklemeye üçüncü satırdan itibaren başlayacağız. Excel'de eklenecek
satır numarasını belirlerken bunu dikkate alıyoruz. Bu nedenle ekleme yapılacak
satır sayısını "int sat=i+3" şeklinde tanımladık. Ekleme yapılacak
sütun sayısını ise "int sut=j+1" şeklinde tanımladık. Bunun nedeni
daha öncede ifade ettiğimiz gibi excel satırlarının 1 değerinden itibaren
indexlenmesidir. Uygulamamızı şimdi çalıştırabiliriz. Veriler görüldüğü gibi
DataGridView'de görüntülenmektedir. "Excel'e Aktar" butonunu
tıkladığımızda, bir excel uygulaması başlatılacak ve veriler excel'e
aktarılacaktır. Benim uygulamamda görüntü aşağıdaki gibidir.
2.Şekil: Uygulamanın çalışması
Son olarak formumuzu kapattığımızda excel uygulamamızda kapansın. Bunun için
formun FormClosed olayına aşağıdaki kodu yazın.
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
yeni.ActiveWindow.Close(null,null,null);
}
|
Excel'e veri gönderdikten sonra almamak olmaz sanırım. Verileri aktardığımız
Excel dosyasını C:\ sürücüsüne Kitap1.xls olarak kaydedelim. Şimdi de excel'den
veri alalım. Bunun için öncelikle kaydettiğimiz excel dosyasını açalım. Verilerin
kayıtlı olduğu hücreleri seçelim. Benim, uygulamamda yukarıdaki resimde
görüldüğü gibi A1-B14 arası hücreleri seçmem gerekiyor. Seçme işlemini
gerçekleştirdikten sonra excel menülerinden
Ekle/Ad/Tanımla seçeneğini tıklayalım.
Çıkan iletişim kutusunda oluşturulacak tablomuza bir isim verelim. Ben
"users" ismini verdim. İlk satırdaki veriler sütun başlıkları olarak
alınır. Böylece seçtiğimiz hücreleri bir tablo olarak tanımladık. Şimdi bir
tane daha buton ekleyelim uygulamamıza ve Click olayına aşağıdaki kodları
yazalım. Öncelikle projemize
System.Data.Odbc
isim alanını eklememiz gerekir.
private void button2_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = " ";
OdbcConnection baglan = new
OdbcConnection("Dsn=Excel Dosyaları;dbq=C:\\Kitap1.xls;defaultdir=C:;driverid=790;maxbuffersize=2048;pagetimeout=5");
OdbcDataAdapter da = new
OdbcDataAdapter("select * from users", baglan);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
|
Görüldüğü gibi ConnectionString dışında diğer veritabanı işlemlerinden bir
farkı yok. Formumuz açıldığında Sql Server'daki "Users" tablosunda
veriler yüklenecektir. "Excel'e Aktar" butonuna tıkladığımızda
veriler excel'e aktarılacaktır. "Excel'den Al" butonuna
tıkladığımızda Odbc nesneleri kullanılarak belirtilen konumdaki excel
dosyasından veriler çekilir. Odbc kullanmak karışık geldiyse aynı işlemi OleDb
nesneleri ile de yapabildiğimizi belirtmek isterim. Access veritabanına
bağlanıyor gibi excel'e bağlanabiliriz. Ancak ConnectionString'te ufak bir
değişiklik yapmamız gerekiyor. Data Source belirttikten sonra "
Extended Properties=Excel 5.0"
ifadesinide ConnectionStringe eklememiz gerekmektedir(
Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\Kitap1.xls; Extended Properties=Excel 5.0). Gerisi bildiğimiz
veritabanı işlemleri.
Hiç yorum yok:
Yorum Gönder