Download Excel file after creation using EPPlus

I use the EPPlus library to create an excel file that I successfully save to a folder on the server.

How to download this file to a local computer?

This is my code.

public void CreateExcelFirstTemplate() { var fileName = "C:\ExcelDataTest\ExcellData.xlsx"; var file = new FileInfo(fileName); using (var package = new OfficeOpenXml.ExcelPackage(file)) { var worksheet = package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Attempts"); worksheet = package.Workbook.Worksheets.Add("Assessment Attempts"); worksheet.Row(1).Height = 20; worksheet.TabColor = Color.Gold; worksheet.DefaultRowHeight = 12; worksheet.Row(1).Height = 20; worksheet.Cells[1, 1].Value = "Employee Number"; worksheet.Cells[1, 2].Value = "Course Code"; var cells = worksheet.Cells["A1:J1"]; var rowCounter = 2; foreach (var v in userAssessmentsData) { worksheet.Cells[rowCounter, 1].Value = v.CompanyNumber; worksheet.Cells[rowCounter, 2].Value = v.CourseCode; rowCounter++; } worksheet.Column(1).AutoFit(); worksheet.Column(2).AutoFit(); package.Workbook.Properties.Title = "Attempts"; package.Save(); } } 
+5
source share
3 answers

If you create this file for each request, you do not need to save it on the server:

 public void CreateExcelFirstTemplate() { var fileName = "ExcellData.xlsx"; using (var package = new OfficeOpenXml.ExcelPackage(fileName)) { var worksheet = package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Attempts"); worksheet = package.Workbook.Worksheets.Add("Assessment Attempts"); worksheet.Row(1).Height = 20; worksheet.TabColor = Color.Gold; worksheet.DefaultRowHeight = 12; worksheet.Row(1).Height = 20; worksheet.Cells[1, 1].Value = "Employee Number"; worksheet.Cells[1, 2].Value = "Course Code"; var cells = worksheet.Cells["A1:J1"]; var rowCounter = 2; foreach (var v in userAssessmentsData) { worksheet.Cells[rowCounter, 1].Value = v.CompanyNumber; worksheet.Cells[rowCounter, 2].Value = v.CourseCode; rowCounter++; } worksheet.Column(1).AutoFit(); worksheet.Column(2).AutoFit(); package.Workbook.Properties.Title = "Attempts"; this.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; this.Response.AddHeader( "content-disposition", string.Format("attachment; filename={0}", "ExcellData.xlsx")); this.Response.BinaryWrite(package.GetAsByteArray()); } } 
+11
source

Instead of using package.Save() you can use package.GetAsByteArray() , which will return an array of bytes, which you can then pass using FileResult or FileContentResult from the MVC action to start the file download. This method will allow you to upload the file without first saving it to the server.

+5
source

Here is an example action to upload a file. Feel free to modify it according to your requirements.

 public FileActionResult DownloadMyFile() { var filePath = "C:\ExcelDataTest\ExcellData.xlsx"; var fileName = "ExcellData.xlsx"; var mimeType = "application/vnd.ms-excel"; return File(new FileStream(filePath, FileMode.Open),mimeType, fileName); } 
+1
source

Source: https://habr.com/ru/post/1211522/


All Articles