Asp.net MVC – Excel’den veri okuma

11 Nis

Merhaba arkadaşlar,
Bugün sizlere MVC yapısı ile verileri excelden okuyup, bu verileri nasıl kullanabileceğimizi anlatacağım.

Bu işlemler sonucunda Excel seçip > Excel içinde ki verileri ayrı bir sayfada göstermiş olacağız.

1- Projemizin referanslarına exceli ekliyoruz. Proje içinde referanslar üzerinde sağ tıklayıp> Add referance diyerek arama kısmına excel yazıp ekleyebilirsiniz.

2- Hangi classta bu kütüphaneyi kullancaksak orada using olarak excel kütüphanesini ekliyoruz.

using Excel = Microsoft.Office.Interop.Excel;

3- View sayfanıza aşağıda ki gibi form eklemesini yapın.

Bir adet Windows Desktop projelerinde OpenFileDialog olarak adlandırdığımız diaolog penceresini çıkartmayı sağlayan input file ve gönder-submit butonu ekliyoruz.

@{
    ViewBag.Title = "Home Page";
}

@using (Html.BeginForm("UploadExcel", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <table>
        <tr>
            <td>File:</td>
            <td>
                <input type="file" name="excelFile" />
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" name="Submit" value="Submit" />
            </td>
        </tr>
    </table>
}

“UploadExcel”,”Home” kısmında, benim HomeControllerımda ki > UploadExcel methoduma gideceğimi belirtiyorum.

Viewa bunu ekledikten sonra şöyle bir html çıktısı görmelisiniz.

4- Modelimizi düzenliyoruz.
Ben örnek olarak şöyle bir model kullandım.

public class ListModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string SurName { get; set; }
        public string Email { get; set; }
    }

5- Controllerımızı düzenliyoruz. Gerekli kısımları kod içinde commentte anlattım.

Benim test amaçlı yaptığım excel şu şekilde;

Ben aşağıda viewBag ile verileri taşıyacağım ancak siz isterseniz ViewModel mantığı ile liste yapıp verileri taşıyabilirsiniz.

[HttpPost]
        public ActionResult UploadExcel(HttpPostedFileBase excelFile)
        {
            //Dosya kontrolü
            if (excelFile == null
            ||  excelFile.ContentLength == 0)
            {
                ViewBag.Error = "Lütfen dosya seçimi yapınız.";

                return View();
            }
            else
            {
                //Dosyanın uzantısı xls ya da xlsx ise;
                if (excelFile.FileName.EndsWith("xls")
                ||  excelFile.FileName.EndsWith("xlsx"))
                {
                    //Seçilen dosyanın nereye kaydedileceği belirtiliyor.
                    string path = Server.MapPath("~/Content/" + excelFile.FileName);

                    //Dosya kontrol edilir, varsa silinir.
                    if (System.IO.File.Exists(path))
                    {
                        System.IO.File.Delete(path);
                    }

                    //Excel path altına kaydedilir.
                    excelFile.SaveAs(path);
                    
                    //+Exceli açıyoruz
                    Excel.Application application = new Excel.Application();
                    Excel.Workbook workbook = application.Workbooks.Open(path);
                    Excel.Worksheet worksheet = workbook.ActiveSheet;
                    Excel.Range range = worksheet.UsedRange;
                    //-

                    //Verileri listeye atıp listele viewında göstereceğim, o yüzden modelimin
                    //tipinde liste değişkeni tanımlıyorum.
                    List<ListModel> localList = new List<ListModel>();
                    
                    //tüm verilerde dönüp ilgili veriyi ilgili modele atıyorum. sonrasında modeli
                    //listeye atıyorum.
                    for (int i = 2; i <= range.Rows.Count; i++)
                    {
                        //ilk önce verileri modele ekleyeceğim bunun için
                        //model değişkenimi tanımlıyorum.
                        //Her seferinde yeni kayıtlarımı atacağım için for içinde tanımılıyorum.
                        //for dışında tanımlarsanız daima son aldığı değerleri listede gösterir.
                        ListModel lm = new ListModel();

                        lm.Id = Convert.ToInt32(((Excel.Range)range.Cells[i, 1]).Text);
                        lm.Name = ((Excel.Range)range.Cells[i, 2]).Text;
                        lm.SurName = ((Excel.Range)range.Cells[i, 3]).Text;
                        lm.Email = ((Excel.Range)range.Cells[i, 4]).Text;

                        localList.Add(lm);
                    }

                    application.Quit();

                    //listeyi bu sayfaya taşımak için bu viewBag içine alıyorum.
                    ViewBag.ListDetay = localList;
                    
                    //listele viewına döndürüyorum.
                    return View("listele");
                }
                else
                {
                    ViewBag.Error = "Dosya tipiniz yanlış, lütfen '.xls' yada '.xlsx' uzantılı dosya yükleyiniz.";

                    return View();
                }
            }
        }

Şuanda bu aşamaya kadar yaptıysanız eğer, artık dosyayı açıp okuma işlemini tamamlamış oluyoruz. Sıra geldi bu listeyi bir sayfada göstermeye.
Controller içinde gördüğünüz üzre ve yukarıda bahsettiğim gibi verileri viewBag ile “listele” viewına dönüyorum. Bundan dolayı ben listele viewımı şu şekilde yapıyorum.

6- Verilerin listelenmesi


@{
    ViewBag.Title = "listele";
}

<h2>listele</h2>

<table cellpadding="2" cellspacing="2" border="1">
    <tr>
        <th>Id</th>
        <th>Ad</th>
        <th>Soyad</th>
        <th>Email</th>
    </tr>
    @foreach (var item in ViewBag.ListDetay)
    {
        <tr>
            <td>@item.Id</td>
            <td>@item.Name</td>
            <td>@item.SurName</td>
            <td>@item.Email</td>
        </tr>
    }
</table>

Evet arkadaşlar işlemler bu kadardır.

Herkese iyi çalışmalar.

One Reply to “Asp.net MVC – Excel’den veri okuma”

  1. Pingback: c# – ExcelDataReader ile Excel’den veri okuma | Semih Çelikol

Bir Cevap Yazın