ASP.Net, PHP, MVC vs Web Programlama C# WinForms ve Mono GTK SQL ve XML Gibi DataSource Tipleri

List to Excel.xlsx

C# Excel export diye internette aradığımızda genelde html sayfasını xls olarak dönüştüren örnekler bulabiliyoruz. Bu dönüştürmeler bilgisayarda açılmaya çalışıldığında güvenlik sorunu varmış gibi kullanıcıya uyarıda bulunuyor ve can sıkıcı olabiliyor. Gibi dedim ama güvenlik sorunu da var o ayrı bir konu.

List, DataTable, Array gibi veri gruplarını çok basit şekilde excel dosyasına yükleyerek xlsx üretebilir. Linq ile buna müdahale edebilir ve hücre hücre şekillendirebiliriz. Bunun için Nuget’tan bulabileceğimiz OfficeOpenXml.Extends kütüphanesini projemize eklememiz gerekiyor. Gerisi en basit haliyle aşağıdaki gibidir.

using (var pack = new OfficeOpenXml.ExcelPackage())
{
      ExcelWorksheet sheet = pack.Workbook.Worksheets.Add("Liste");
      sheet.Cells.LoadFromCollection<model>(source, true);
      sheet.Cells["A:AZ"].AutoFitColumns();
      File.WriteAllBytes("file.xlsx",pack.GetAsByteArray());
}

Sonuç aşağıdadır.

Herhangi bir Xlsx dosyasını okuyup listeye yüklemek için ise basit anlamda aşağıdaki gibi bir işlem yapabiliriz.

var file = new FileInfo(@"file.xlsx");
using (var package = new ExcelPackage(file))
{
      var workbook = package.Workbook;
      var worksheet = workbook.Worksheets.First();
      var cells = worksheet.Cells.ToList();
}

Aşağıda MVC ile ürettiğimiz excel dosyasını response ediyoruz.

//Dosya üreten sınıf
using OfficeOpenXml;

namespace myProject.Toolbox
{
    public class FileExport
    {
        public static byte[] ExcelExport(dynamic source)
        {
            using (var pack = new OfficeOpenXml.ExcelPackage())
            {
                ExcelWorksheet sheet = pack.Workbook.Worksheets.Add("Rapor");
                sheet.Cells.LoadFromCollection(source, true);
                sheet.Cells["A:AZ"].AutoFitColumns();
                return pack.GetAsByteArray();
            }
        }
    }
}

//Controller
public async Task<FileResult> RaporExcelExport()
{
    DateTime dt = DateTime.Now;
    var result = db.Raporlar();
    return File(FileExport.ExcelExport(result), System.Net.Mime.MediaTypeNames.Application.Octet, "Rapor_" + dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + ".xlsx");
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir