Veritabanından excel dosyasına veri aktarımı

Veri tabanından çekilen verileri Excel dosyasına kaydedeceğiz.

Merhaba Arkadaşlar,
Konu ile ilgili bir ders olmasına rağmen dersin eksik [-yarım] kaldığını düşündüğüm için ekliyorum bu dersi.
Öncelikle excel dosyasına yazmak için response.Write ile ilgili yöntemler de var;ancak bunlarda sürekli olarak format hatası oluşmaktadır.Ve oluşturduğunuz excel dosyasını başka program ile kullamıyorsunuz.Oysa bu yöntem ile tamamen formatı excel olan,hatalardan arınmış bir excel dosyasını hücre hücre oluşturup kaydedeceğiz.

Neyse konuya geçelim.İlk olarak References/Add Reference/Net kısmından Microsoft.Office.Interop.Excel kütüphanesini ekliyoruz.Excel ile ilgili işlemleri yapmamız için gerekli bir durum bu.

Daha sonra üst kısıma


using Excel = Microsoft.Office.Interop.Excel;


kodunu yazıyoruz ki,her seferinde Microsoft.Office.Interop.Excel yazmak yerine sadece Excel yazabileyim.

Ben veri tabanından datatable'a veri aktarabildiğinizi düşünerek o kısmı es geçiyorum.Bu konuda sıkıntısı olan arkadaşlar buradan sorabileceği gibi,hem bu sitede hem de başka sitelerde bu konu hakkında sayısız örneğe ulaşabilirler.

Şimdi gelelim esas olaya,aşağıya eklediğim fonksiyonda gerekli yerlerde yorum satırlarını kullandım.


public void fillExcel(DataTable dt, string fileName)

{

    try

    {

        //Sistemin karakter dilini geçici olarak inglizceye çeviriyoruz.Olası format hataları yüzünden.

        System.Globalization.CultureInfo myCultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;

        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");



        //Excel uygulaması,dosyası ve sayfası oluşturuyoruz.

        Excel.Application eApplication = new Excel.Application();

        Excel.Workbook eWBook;

        Excel.Worksheet eWSheet;



        eApplication.Visible = false;

        eWBook = eApplication.Workbooks.Add(Type.Missing);



        eWSheet = (Excel.Worksheet)eWBook.ActiveSheet;



        //Veritabanındaki kolon isimlerini,excel dosyasında başlık olarak ekliyoruz.

        //Not : excelde indexler [0,0] değil [1,1] şeklinde başlar.

        for (int z = 0; z < dt.Columns.Count; z++)

        {

            eWSheet.Cells[1, z + 1] = dt.Columns[z].ColumnName.ToString();

        }



        //Excel dosyasını hücre hücre dolaşıp,datatable içeriğini excele dolduruyoruz.

        for (int iRow = 0; iRow < dt.Rows.Count; iRow++)

        {

            for (int jCol = 0; jCol < dt.Columns.Count; jCol++)

            {

                eWSheet.Cells[iRow + 2, jCol + 1] = dt.Rows[iRow][jCol].ToString();

            }

        }



        //En önemli kısım burası.Projemizde "Excel" isminde bir dosya oluşturdum oraya kaydediyorum.

        //Masaüstü uygulamalarında bu path -> @"C:Excel" + fileName şeklinde verilir.

        eWSheet.SaveAs(Server.MapPath("~/Excel/") + fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8, Type.Missing, Type.Missing, false, Type.Missing

                , Type.Missing, Type.Missing, Type.Missing, Type.Missing);



        eApplication.UserControl = true;

        //sistemin karakter dilini tekrar eski haline getiriyoruz.

        System.Threading.Thread.CurrentThread.CurrentCulture = myCultureInfo;



        //bundan sonraki kodları cache'i boşaltmak ve oluşturduğumuz excel dosyasını serbest bırakarak üzerinde işlem yapabilecek duruma getirmek yazıyoruz.

        //Not : bunların yazılması,excel dosyamızı başka yerde kullanabilmek amacıyla (dosya zaten kullanımda hatası ALMAMAk için) önemlidir.

        eWBook.Close(true, Type.Missing, Type.Missing);



        eApplication.Quit();

        dt.Dispose();



        Marshal.ReleaseComObject(eWSheet);

        Marshal.ReleaseComObject(eWSheet);

        Marshal.ReleaseComObject(eWBook);

        Marshal.ReleaseComObject(eWBook);

        Marshal.ReleaseComObject(eApplication);



        GC.GetTotalMemory(false);

        GC.Collect();

        GC.WaitForPendingFinalizers();

        GC.Collect();

        GC.GetTotalMemory(true);

    }

    catch (Exception ex)

    {

        //Kendime ait,uyarı vermeye yönelik script kodudur.isterseniz kullanmazsınız.

        messageBox("Hata : " + ex.Message);

    }

}


MessageBox kodu :

public void messageBox(string message)

{

    string script = null;

    script = "<script language='javascript' type='text/javascript'>";

    script += "alert('" + message + "');";

    script += "</script>";

    ScriptManager.RegisterClientScriptBlock(Page, GetType(), "AbrirPagina", script, false);

}



Konu ile ilgili sorularınız olması durumunda lütfen sormaktan çekinmeyiniz...
  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

@Leadtek : Otomatik biçimlendirmeden kastın ne acaba?

Yukarı Git