2013-09-10 18 views
15

Używam więc eleganckiej biblioteki EPPlus do napisania pliku Excela i wysłania go użytkownikowi do pobrania. W przypadku poniższej metody używam tylko niektórych danych testowych, aby zminimalizować kod, a następnie dodam kod, którego używam do połączenia się z bazą danych później. Teraz mogę pobrać plik w porządku, ale kiedy idę do otwarcia pliku, Excel skarży się, że nie jest to prawidłowy plik i może być uszkodzony. Kiedy patrzę na plik, mówi się, że ma on 0 KB. Moje pytanie brzmi: gdzie się mylę? Zakładam, że jest z MemoryStream. Nie robiłem jeszcze wiele pracy ze strumieniami, więc nie jestem do końca pewny, czego tu użyć. Każda pomoc będzie doceniona!ASP.NET MVC EPPlus Pobierz plik Excel

[Authorize] 
public ActionResult Download_PERS936AB() 
{ 
    ExcelPackage pck = new ExcelPackage(); 
    var ws = pck.Workbook.Worksheets.Add("Sample1"); 

    ws.Cells["A1"].Value = "Sample 1"; 
    ws.Cells["A1"].Style.Font.Bold = true; 
    var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect); 
    shape.SetPosition(50, 200); 
    shape.SetSize(200, 100); 
    shape.Text = "Sample 1 text text text"; 

    var memorystream = new MemoryStream(); 
    pck.SaveAs(memorystream); 
    return new FileStreamResult(memorystream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "PERS936AB.xlsx" }; 
} 

Odpowiedz

35

Oto co używam - Używam tego od kilku miesięcy i nie miałem problemu:

public ActionResult ChargeSummaryData(ChargeSummaryRptParams rptParams) 
    { 
     var fileDownloadName = "sample.xlsx"; 
     var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 

     var package = CreatePivotTable(rptParams); 

     var fileStream = new MemoryStream(); 
     package.SaveAs(fileStream); 
     fileStream.Position = 0; 

     var fsr = new FileStreamResult(fileStream, contentType); 
     fsr.FileDownloadName = fileDownloadName; 

     return fsr; 
    } 

Jedno zauważyłam tuż nietoperza jest to, że nie resetuj pozycji strumienia plików z powrotem do 0.

+0

Naprawiono to naprawdę dobrze, ustawiając pozycję. Dzięki! – Chiggins

Powiązane problemy