27 Haziran 2012 Çarşamba

Asp.NET ile Excel'den Veri Okumak

Asp.NET ile Excel'den Veri Okumak


Bundan önceki makalem de (Oracle PL SQL'de Dizi Kullanımı) ile ilgili bilgiler vermiştik şimdide bir sonraki makalemize geçebilmek için bir geçiş makalesi yazma ihtiyacı duydum.

Bir önceki makalemde sizlere "Asp.Net ile Bir Excel dosyasının içeriğini açıp verileri Asp.Net tarafında '#' operatörü ile birleştirdikten sonra bu değerleri bir Stored Procedure vasıtasıyla Tablomuza INSERT eden bir proje yapıp bunları sizin le paylaşacağım" demiştim.Bunun için bu makalemizde Asp.Net'de Excel Upload nasıl yapılır Excel'den veriler okunup .Net nesnelerine nasıl yerleştirirlir bunları sizinle paylaşacağım.



Excel Upload için Aşağıdaki gibi bir ekran tasarımı yapalım.

















Bu ufak proje'de kullanıcının seçtiği excel dosyasını önce Sunucuya yükleyeceğiz sonra sunucudaki bu excel dosyasından Excel verilerini okuyup bu verileri bir DataTable nesnesine yerleştireceğiz ve bu excel dosyasıyla işimiz bittiği için bu dosyayı sunucudan sileceğiz.:Bu işlemden sonra DataTable'daki verileri DataGrid nesnesi üzerinde görüntüleyeceğiz.

Excel dosyasını sunucuya yüklemek için aşağıdaki gibi bir fonksiyon yazmalıyız.


    #region Excel Dosyasını Server a Alma
    private string ExcelUpload()  //Excel dosyasının bir kopyası serverda ki ExcelUpload klasörüne alınıyor
    {
        string filefolder = Server.MapPath("ExcelUpload/");
        string filename = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);
        string filepath = filefolder + filename;

        try
        {
            if (!System.IO.Directory.Exists(filefolder))
            {
                System.IO.Directory.CreateDirectory(filefolder);
            }

            FileUpload1.PostedFile.SaveAs(filepath);
        }
        catch (Exception exc)
        {
            Response.Write("Hata : " + exc.Message);
        }
        return filepath;
    }
    #endregion


Yukarıdaki kod parçasıyla Excel dosyamızı sunucuya yükledikten sonra sıra geldi bu dosya içerisindeki verileri Okuyup bir DataTable nesnesine doldurmaya.

Excel'deki kolon yapısını düşündüğümüzde bizim database tablolarımızdan bir farkı olmadığını görmüşsünüzdür.Excel içerisindeki verileri bir database tablosu içerisindeki veriler gibi düşünebiliriz ve bir tablodan veri çekebilmek için ilgi veritabanına bir Connection oluşturup bir select cümleciği çalıştırmanız gerekmektedir.Bizde excel'den veri çekebilmek için buna benzer bir yapı kullanacağız

Aşağıdaki kod bloğu ile Excel dosyasından veriyi okuyup , bu veriyi DataTable nesnemize yerleştirdikten sonra sunucudan bu excel dosyasını silebiliriz.


    #region Excel Dosyasından Satırları oku
    private System.Data.DataTable ReadFromExcelData()
    {
        System.Data.DataTable dTableExcel = null;

        string filePath = ExcelUpload();

        try
        {
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;"

            System.Data.DataSet dSetExcel = new System.Data.DataSet();

            System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);

            da.Fill(dSetExcel);

            //Upload edilen excel dosyasını serverdan sil...
            System.IO.File.Delete(filePath);

            //Excel'de bulunan datalar .Net tarafında bir Datatable'a alındı
            dTableExcel = dSetExcel.Tables[0];

            return dTableExcel;
        }
        catch (Exception exc)
        {
            Response.Write("Hata : " + exc.Message);

            return dTableExcel;
        }
    }
    #endregion



Excel dosyasını Server'a yükleyen ExcelUpload(); ve bu dosyadan veri okuyan ReadFromExcelData() isimli fonksiyonlarımız'ı yazdığımıza göre artık bu fonksiyonları tetikleyebiliriz.Bunun için tasarladığımız ekrandaki "Yükle" butonunun "Click" event'ına aşağıdaki kodları bağlamalıyız.


    protected void btnUpload_Click(object sender, EventArgs e)
    {
        //Excel'deki Satıları Oku ve Bunları Al
        System.Data.DataTable dt = ReadFromExcelData();

              //Gelen değeri daha sonra kullanılmak üzere bir Session içine alalım ve işimiz 
          bittikten sonra bu session'ı kill etmeyi unutmayalım
        Session.Add("ExcelTable", dTableExcel);


        if (dt != null) //Excel dosyası boş değilse bunları gridde göster
        {
            DataGrid1.DataSource = dt; //Dataları grid'e datakaynağı olarak ver
            DataGrid1.DataBind();   //Dataları Gride Bağla
        }
    }




Yükle butonunumuzun Click Eventı 'da hazır olduğuna göre artık projemizi Build edip Çalıştırırabiliriz ve test işlemi için aşağıdakine benzer bir Excel dosyası oluşturalım.

.











Excel dosyamızı hazırladıktan sonra ekranımızı açıp ekrandan FileUpload nesnesinin "BROWSE" butonuna basıyoruz ve açılan ekrandan yeni oluşturduğumuz Excel dosyasını seçiyoruz ve Ekranımızdaki "Yükle" butonuna basıyoruz ve Excel 'deki dataların Ekrana gelmesi için ufak bir süre bekliyoruz.

Ekran görüntüsü;


4 yorum:

  1. Hazırlamış Olduğunuz bu yöntemleri projelerimde kullanabilir miyim

    YanıtlaSil
  2. Eseh merhaba, tabiki kullanabilirsin herhangi bir sıkıntı olursa yardımcı olmaya çalışırım.

    YanıtlaSil
  3. Nasıl İrtibat kurabiliriz sizenle musaagac@hotmail.com

    YanıtlaSil
  4. Murat bey exceli dışarı export edince excel programıyla açmaya çalıştığımızda uzantıyla içeriğin farklı olduğuyla alakalı uyarı veriyor başlangıçta.. Bu uyarının çıkmaması için ne yapabiliriz ?

    YanıtlaSil