2015-01-20 14 views
5

Sto utilizzando la libreria EPPlus per generare un file excel che ho salvato con successo in una cartella sul server.Download di file Excel dopo la creazione utilizzando EPPlus

Come posso scaricare questo file sul mio computer locale?

Questo è il mio codice

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

Vuoi salvare il file sul server o si desidera solo per generare ogni volta che l'utente richiede un download? –

+0

Voglio generare il file ogni volta che l'utente richiede un download – Arianule

risposta

10

Se si sta generando il file su ogni richiesta non è necessario per salvare sul 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()); 
     } 
}   
+0

Sto usando il codice di esempio fornito da te .. Ma sto chiamando questo usando una chiamata Ajax e quando lo eseguo, va in errore ajax e non è in grado di scaricare Excel file. Grazie in anticipo. –

+0

Non è necessario utilizzare ajax per scaricare il file. Fai un regolare get/post. A causa della Content-Disposition che abbiamo deciso di impostare, i browser sapranno come gestire correttamente la risposta (scaricando un allegato). Puoi leggere questa intestazione qui: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition –

1

Ecco l'azione di esempio per scaricare il file. Sentitevi liberi di modificarlo secondo le vostre esigenze.

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

Invece di utilizzare package.Save() è possibile utilizzare package.GetAsByteArray() che restituirà un array di byte che sarà poi possibile lo streaming utilizzando FileResult o FileContentResult dall'azione MVC per innescare un file di download. Questo metodo ti consentirà di scaricare il file senza prima salvarlo sul server.

Problemi correlati