DataGridView' den Excel çıktısı alma
C# Form uygulamasında excel çıktısı alabilmek için bize gerekli olan kütüphane
using Excel = Microsoft.Office.Interop.Excel;
Bu kütüphaneyi kullanarak Form uygulamamızda bulunan DataGridView içerisinde seçili olan verileri Excel dosyasına yazdırabileceğiz.Form bir adet datagrid ve 1 adet buton içermektedir.
Buton excel çıktısı almamızı sağlayan buton olacaktır.
DataGridView' e veri tabanı bağlantısı yapıldıktan sonra veritabanındaki tabloların excele yazılması için butona tıkladığında çalışması gereken kod aşağıdaki gibidir.
private void button1_Click(object sender, EventArgs e)
{
//Download Excel
conn = "SQLSERVER BAĞLANTISI";
SaveFileDialog file = new SaveFileDialog();
file.Filter = "Excel dosyaları (* .xlsx) | * .xls | Tüm dosyalar (*. *) | *. *";
file.CreatePrompt = true;
if (file.ShowDialog() == DialogResult.OK)
{
try
{
conn.Open(); //SQL Server bağlantısı açık.
var excel = "select *from ürünler"; //SQL Server Sorgusu
cmd = new SqlCommand(excel, conn); //SQL komutunu veritabanında çalıştırma
read = cmd.ExecuteReader(); //Veritabanından veri okuma
Excel.Application xlap = new Excel.Application(); //Excel Uygulama nesnesi oluşturma
if (xlap == null)
{
MessageBox.Show("Bilgisayarınızda Excel bulunmuyor!\nBu işlemi Excel yüklü değil iken yapamazsınız.");
//Excel yüklü mü diye kontrol eden koşul ifadesi
return;
}
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet; //Excel kitaplığı tanımlaması
object misValue = System.Reflection.Missing.Value;
xlWorkBook = xlap.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//İlk satırda başlık olarak yazılacak öğeler.
xlWorkSheet.Cells[1, 1] = "ID";
xlWorkSheet.Cells[1, 2] = "Ürün Kodu";
xlWorkSheet.Cells[1, 3] = "Ürün Açıklaması";
xlWorkSheet.Cells[1, 4] = "Ürün Adı";
xlWorkSheet.Cells[1, 5] = "Ürün Stok";
int i = 1;
while (read.Read() && i <= dataGridView1.Rows.Count)
{
i++;
xlWorkSheet.Cells[i, 1] = Convert.ToInt32(read["tablosatırı0"]);
xlWorkSheet.Cells[i, 2] = read["tablosatırı1"];
xlWorkSheet.Cells[i, 3] = read["tablosatırı2"];
xlWorkSheet.Cells[i, 4] = read["tablosatırı3"];
xlWorkSheet.Cells[i, 5] = read["tablosatırı4"];
//Döngü yardımıyla veritabanındaki öğeleri ilgili satırların altına satır satır yazdırma
}
xlWorkBook.SaveAs(file.FileName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlap.Quit(); //Kitaplığı kapat
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(xlap);
MessageBox.Show("Excel dosyası oluşturuldu.\n","UYARI",MessageBoxButtons.OK,MessageBoxIcon.Information);
conn.Close();
}
catch (Exception ex)
{
if (dataGridView1.Rows.Count == 0)
{
MessageBox.Show("Listede seçili öğe olmadığı için Excel hatalı oluşturuldu.\n");
}
;else
{
MessageBox.Show(ex.Message);
}
}
}
}
1. Kod örneğinde olduğu gibi try-catch yöntemiyle oluşabilecek veritabanı hatalarını yakalamaya çalıştık.
2. SaveFileDialog ile alacağımız çıktının dosya yolunu belirlemek için açılır pencerenin çalışmasını sağladık.
3. Açılır pencere açıldıktan bilgisayarda excelin yüklü olup olmadığını kontrol ettik ve yüklü değilse if kod bloğunun altındaki işlemler başladı.
4. Excel yüklüyse yeni bir excel kitaplığı oluşturduk ve bir adet misValue adında nesne tanımladık.
5. Oluşturduğumuz nesneyi Excel kitaplığımıza ekledik ve kitaplığı açtık.
6. Ardından veritabanındaki verilerin excel tablo satırlarında nasıl görüneceğini ayarlamak için excelin ilk satırlarını yazdık.
7. Yazdığımız ilk satırlar verilerin tablo düzenindeki açıklamalarını belirten kısımlardır.
8. Ardından while döngüsü yardımyla veritabanında yazdıkmak istediğimiz öğeleri read[""] okuma methoduyla excel tablolarına aktardık.
9. Döngünün içindeki i değişkeni excel tabloların satır işlemleri için kullanılmıştır. Döngü tamamlanıp başa dönmeden önce bir alt satıra geçmemizi sağlayarak
veri karmaşıklığı olmasını engelledik.
10. Ardından excelin kayıt işlemlerini yaptık ve conn.Close() methoduyla veritabanı bağlantısını sonlandırdık.
C# Form ile DataGridView içerisinden veri alıp Excel formatında yazdırmak bu şekildeydi. İyi çalışmalar :)
Görüşleriniz benim için önemli!