2016-11-09 2 views
1

Ich muss eine Methode erstellen, die Modell erhalten wird, bauen Excel daraus (Gebäude und Empfangsteil ist ohne Probleme erledigt) und exportieren Sie dann (lassen Sie Benutzer es herunterladen) mit Speicher Stream (ohne es auf dem Server zu speichern). Ich bin neu in ASP.NET MVC und so fand ich Führer und dies als Tutorial-Projekt gebaut:C# Asp.NET MVC herunterladen Excel-Datei mit FileStreamResult

public FileResult Download() 
    { 
     Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 

     Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
     Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 

     object misValue = System.Reflection.Missing.Value; 

     xlWorkBook = xlApp.Workbooks.Add(misValue); 
     xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     xlWorkSheet.Cells[1, 1] = "ID"; 
     xlWorkSheet.Cells[1, 2] = "Name"; 
     xlWorkSheet.Cells[2, 1] = "1"; 
     xlWorkSheet.Cells[2, 2] = "One"; 
     xlWorkSheet.Cells[3, 1] = "2"; 
     xlWorkSheet.Cells[3, 2] = "Two"; 


     var path = "C:\\Work-Work\\TestFolder\\XCLbuildTry1\\csharp-Excel.xls"; 
     xlWorkBook.SaveAs(path); 
     xlWorkBook.Close(true, misValue, misValue); 
     xlApp.Quit(); 

     Marshal.ReleaseComObject(xlWorkSheet); 
     Marshal.ReleaseComObject(xlWorkBook); 
     Marshal.ReleaseComObject(xlApp); 
     return File(path, "application/vnd.ms-excel", "WidgetData.xlsx"); 
    } 

Jetzt muß ich diesen Code ändern, diese Methode ohne speichern meine Excel-Datei auf dem Server meine Excel zu machen Datei gesendet . Ich habe versucht, einige Anleitungen und Antworten hier zu googeln, auf Stack, aber für den Moment kann ich keine Lösung finden, die ich implementieren kann.

Ich denke, ich sollte FileStreamResult verwenden, aber alle Anleitungen geben keine bestimmten Informationen zum Erstellen und Einfügen meiner Datei in Stream.

Antwort

5

Leider scheint nicht, dass die Microsoft.Office.Interop.Excel.Workbook Schnittstelle (msdn) können Sie Ihre Arbeitsmappe in einen Arbeitsspeicher Stream konvertieren.

Allerdings habe ich in der Vergangenheit eine externe Bibliothek verwendet, EPPlus, die fantastisch funktioniert hat.

Siehe unten für den Code mit EPPlus, bei dem Sie die Datei nicht auf dem Server speichern müssen.


Businesslogic

public MemoryStream Download() { 
    MemoryStream memStream; 

    using (var package = new ExcelPackage()) { 
     var worksheet = package.Workbook.Worksheets.Add("New Sheet"); 

     worksheet.Cells[1, 1].Value = "ID"; 
     worksheet.Cells[1, 2].Value = "Name"; 
     worksheet.Cells[2, 1].Value = "1"; 
     worksheet.Cells[2, 2].Value = "One"; 
     worksheet.Cells[3, 1].Value = "2"; 
     worksheet.Cells[3, 2].Value = "Two"; 

     memStream = new MemoryStream(package.GetAsByteArray()); 
    } 

    return memStream; 
}  

-Controller

public FileStreamResult Download() { 
    var memStream = BusinessLogic.Download(); 
    result File(memStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
} 
+0

Sieht aus wie wird es funktionieren, aber mein 'worksheet' von 'read-only' -Modus ist gesperrt. Ich habe einige Lösungen auf Stapel versucht: http://stackoverflow.com/questions/20751808/make-column-or-cells-readonly-with-epplus -> gibt überhaupt kein Ergebnis, aber keine Warnungen http: //stackoverflow.com/questions/19999531/how-to-create-readonly-excel-sheet-using-c-sharp-net -> Gibt Warnung 'Keine Definition' http://stackoverflow.com/questions/18059979/creating-an-excel-Datei-mit-epplus-aber-es-ist-immer-nur-lesen -> Ich habe keine Ahnung, wie Browser VS Warnungen auf meinem Code (letzte Antwort) geben kann – rainbowShiningUnicorn

+0

@rainbowShiningUnicorn Ist die Blatt schreibgeschützt oder wird die gesamte Arbeitsmappe nur beim Speichern gelesen? – Chawin

+0

Eigenschaft 'Zellen' haben nur' get' Methode. – rainbowShiningUnicorn

Verwandte Themen