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>
<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.

10 Replies to “Asp.net MVC – Excel’den veri okuma

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

  2. 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,
      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 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.
      İyi çalışmalar.

  3. @foreach (var item in ViewBag.ListDetay)
    satırında
    System.NullReferenceException: ‘Nesne başvurusu bir nesnenin örneğine ayarlanmadı.’ hatası veriyor, yardımcı olurmusunuz

  4. 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.

sena için bir cevap yazınCevabı iptal et