2015-01-20 9 views
5

Używam biblioteki EPPlus do wygenerowania pliku programu Excel, który pomyślnie zapisuję w folderze na serwerze.Pobieranie pliku Excel po utworzeniu za pomocą programu EPPlus

Jak pobrać ten plik na mój komputer lokalny?

To jest mój kod

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

chcesz zapisać ten plik na serwer lub po prostu chcesz, aby wygenerować go za każdym razem, użytkownik prosi o pobranie? –

+0

Chcę wygenerować plik za każdym razem, gdy użytkownik prosi o pobranie – Arianule

Odpowiedz

10

Jeśli generowania tego pliku na każde żądanie nie trzeba zapisać go na serwerze:

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

Używam przykładowy kod dostarczony przez ciebie .. Ale nazywam to przy użyciu wywołania ajax i po jej uruchomieniu, idzie w błąd ajax i nie jest w stanie pobrać excela plik. Z góry dziękuję. –

+0

Nie musisz używać ajax w celu pobrania pliku. Zrób regularne get/post. Ze względu na ustawione przez nas ustawienie zawartości, przeglądarki będą wiedzieli, jak poprawnie obsłużyć odpowiedź (pobieranie załącznika). Możesz przeczytać o tym nagłówku tutaj: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition –

1

Oto próbka działania aby pobrać plik. Możesz go zmodyfikować zgodnie ze swoimi wymaganiami.

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

Zamiast package.Save() można użyć package.GetAsByteArray() która będzie zwracać tablicę bajtów, które można następnie za pomocą strumienia FileResult lub FileContentResult z działania MVC do wyzwalania pobieranie pliku. Ta metoda umożliwia pobranie pliku bez uprzedniego zapisania go na serwerze.

Powiązane problemy