2016-10-24 4 views
0

Ich bin mir nicht sicher, was ich hier vermisse. Ich habe einen Knopf, den ich benutze Javascript, um einen Controller aufzurufen. Dieser Controller sollte eine Excel-Datei erstellen und sie an den Benutzer zurückgeben, damit sie die Datei herunterladen/speichern kann. Ich habe ein paar verschiedene Methoden ausprobiert, aber es gelingt mir nicht, es zum Laufen zu bringen. Hier ist meine Javascript-Seite:.NET C# Export nach Excel über JS Post mit ExcelPackage

function exportList() { 
    var val = $("#team-dropdown").val(); 
    const date = new Date().toISOString(); 
    const param = { 
     "Date": date, 
     "GroupID": 1 
    } 

    $.ajax({ 
     url: "@Url.Action("ExportToExcel", "Home")", 
     type: "POST", 
     data: param 
    }); 
} 

Hier ist meine Server-Seite:

public FileResult ExportToExcel(DateTime date, int groupID) 
     { 
      Load l = new Load(); 
      List<Load> loadList = l.GetLoadsForGroup(date, groupID); 

      var fileDownloadName = "fileName.xlsx"; 
      var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 

      ExcelPackage pck = new ExcelPackage(); 
      var ws = pck.Workbook.Worksheets.Add("New workbook"); 
      ws.View.ShowGridLines = true; 
      ws.DefaultColWidth = 25; 
      ws.Cells[1, 1].Value = "Order #"; 

      var currRow = 2; 
      foreach (var load in loadList) 
      { 
       ws.Cells[2, 2].Value = load.LoadNumber;      
      } 



      var fs = new MemoryStream(); 
      pck.SaveAs(fs); 
      fs.Position = 0; 
      var fsr = new FileStreamResult(fs, contentType); 
      fsr.FileDownloadName = fileDownloadName; 
      return (fsr); 
     } 

nicht sicher, was der beste Weg, dies zu tun. Wenn es einen besseren Weg gibt, zögern Sie nicht, es auszuarbeiten.

+0

Hallo, ich habe 'ActionResult' anstelle von FileResult und die Ausgabe, die ich gesendet habe, indem: 'Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; Response.AddHeader ("Inhaltsdisposition", "Anhang; Dateiname = \" "+ Dateiname +" \ ""); Response.BinaryWrite (Daten); Response.Flush(); Response.End(); ' –

+1

Hallo wieder. Ich habe einfach Ihren Code benutzt und konnte die Arbeitsmappe mit einem HTML-Formular erstellen. Wie folgt: '

' ein –

+0

@VagnerLucas versuchen Verstanden zu arbeiten. Danke für Ihre Hilfe! – James

Antwort

2

Ihre Methode sieht gut aus. In diesem Fall müssen Sie nur einen HTML-Code form verwenden, um zu veröffentlichen, anstatt die js-Funktion zu verwenden. Alternativ, wenn Sie möchten, dass ein verwenden ActionResult können Sie schreiben:

public ActionResult ExportToExcel() 
    { 
     Load l = new Load(); 
     List<Load> loadList = l.GetLoadsForGroup(date, groupID); 

     var fileDownloadName = "fileName.xlsx"; 
     var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 

     ExcelPackage pck = new ExcelPackage(); 
     var ws = pck.Workbook.Worksheets.Add("New workbook"); 
     ws.View.ShowGridLines = true; 
     ws.DefaultColWidth = 25; 
     ws.Cells[1, 1].Value = "Order #"; 

     var currRow = 2; 
     foreach (var load in loadList) 
     { 
      ws.Cells[2, 2].Value = load.LoadNumber; 
     } 

     Response.Clear(); 
     Response.ContentType = contentType; 
     Response.AddHeader("content-disposition", "attachment; filename=\"" + fileDownloadName + "\""); 
     Response.BinaryWrite(pck.GetAsByteArray()); 
     Response.Flush(); 
     Response.End(); 
     return View(); 
    } 

Und Sie das gleiche Ergebnis wie Ihre Methode erhalten.