Search code examples
c#asp.net-mvcdownloadepplus

Downloading Excel file after creating using EPPlus


I am using the EPPlus library to generate an excel file which I successfully save in a folder on the server.

How can download this file to my local machine?

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();
  }
}

Solution

  • If you are generating this file on each request you don't 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());
          }
    }