
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> <tbody> <tr> <td>File:</td> <td><input name="excelFile" type="file" /></td> </tr> <tr> <td colspan="2"><input name="Submit" type="submit" value="Submit" /></td> </tr> </tbody> </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) { 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 yükleneceği seçiliyor. 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); Excel.Application application = new Excel.Application(); Excel.Workbook workbook = application.Workbooks.Open(path); Excel.Worksheet worksheet = workbook.ActiveSheet; Excel.Range range = worksheet.UsedRange; List localList = new List(); for (int i = 2; i <= range.Rows.Count; i++) { 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(); ViewBag.ListDetay = localList; 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 border="1" cellspacing="2" cellpadding="2"> <thead> <tr> <th>Id</th> <th>Ad</th> <th>Soyad</th> <th>Email</th> </tr> <tbody> @foreach (var item in ViewBag.ListDetay) { <tr> <td>@item.Id</td> <td>@item.Name</td> <td>@item.SurName</td> <td>@item.Email</td> </tr> } </tbody> </table>
Evet arkadaşlar işlemler bu kadardır.
Herkese iyi çalışmalar.
Pingback: c# – ExcelDataReader ile Excel’den veri okuma | Semih Çelikol
Yazı için teşekkürler..
merhabalar,
aynı şekilde exelden okuyup modelime aktarıyorum fakat for döngüsünde exeldeki veri kadar okuyor modele baktığımda ise boyutu cok yüksek oluyor diğerlerine null değer atıyor. Sebebi nedir?
Merhaba, değişkeninize list.add(m); diyerek atama yaptığınızdan emin olun. Tabii excelden doğru satır/sütunları, verileri çektiğinizden çekebildiğinizden de emin olun, for içinde debug yapıp kontrol etmenizi öneririm.
For içinde her seferinde yeni model initialize edip o modeli listeye attığınıza emin olun. Yani “Model m = new Model(); m.Id,m.Name” gibi modele atamaları yaptıktan sonra, List
İyi çalışmalar.
@foreach (var item in ViewBag.ListDetay)
satırında
System.NullReferenceException: ‘Nesne başvurusu bir nesnenin örneğine ayarlanmadı.’ hatası veriyor, yardımcı olurmusunuz
Merhaba,
ViewBag.ListDetay boş geliyor gibi gözükmekte debug yapıp veri gönderdiğiniz emin olmalısınız.
Merhabalar localde çalıştırdım ama sunucuya atınca hata veriyor. CLSID değerine bileşen için COM sınıfı fabrikasını alma, Sınıf kaydedilmemiş gibi bir hata alıyorum.
Merhaba,
Debug yapıp incelemeniz gerekmektedir. Tam hatayı yazarsanız belki yardımcı olabilirim.
merhaba for(…. & lt ne ben bir türlü bulamadım oprda ne var bende sürekli hata onun yerine ne yazacam
Merhaba,
Bazı düzenlemelerimden kaynaklı text’ler bozulmuş. Şuan düzelttim. Tekrar inceleyebilirsiniz.