2013-09-10 18 views
15

Quindi sto utilizzando la libreria di fantasia EPPlus per scrivere un file Excel e inviarlo all'utente per il download. Per il metodo seguente sto solo usando alcuni dati di test per minimizzare il codice, quindi aggiungerò il codice che sto usando per connettermi al database più tardi. Ora posso scaricare un file tutto bene, ma quando vado ad aprire il file, Excel si lamenta che non è un file valido e potrebbe essere danneggiato. Quando vado a guardare il file, dice che è grande 0KB. Quindi la mia domanda è: dove sto andando male? Presumo che sia con il MemoryStream. Non ho lavorato molto con i flussi prima quindi non sono esattamente sicuro di cosa usare qui. Qualsiasi aiuto sarebbe apprezzato!ASP.NET MVC EPPlus Scarica il file 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" }; 
} 

risposta

35

Ecco quello che sto usando - Sto usando questo per diversi mesi e non ho avuto un problema:

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

Una cosa che ho notato destra fuori del blocco è che si non ripristinare la posizione del flusso di file di nuovo a 0.

+0

Che ha risolto davvero bene, mettendo la posizione. Grazie uomo! – Chiggins

Problemi correlati