2017-06-08 3 views
0

Ich bin dabei, ein Projekt von VS 2012 bis 2015 zu aktualisieren, bin ich auf den endgültigen Fehler, der Excel-Dateien zum Exportieren bekommen . Ich verwende NPOI, um die Excel-Datei und den Code unten zu erstellen, um sie zu exportieren. Sobald der Code die Response.End() Linie trifft, bekomme ich folgende Fehlermeldung:Upgrade auf VS 2015, jetzt Probleme beim Exportieren von Excel aufgrund von Response.End

Ausnahme ausgelöst: 'System.Threading.ThreadAbortException' in mscorlib.dll Zusätzliche Informationen: Thread wurde abgebrochen.

Die Datei lädt sich jedoch immer noch und öffnet sich perfekt. Ich habe versucht, die Response.End() -Zeile auskommentieren, und erhielt keinen Fehler aus dem Code, aber beim Öffnen der Excel-Datei erhalte ich diesen Fehler:

Wir fanden ein Problem mit einigen Inhalten in 'ContactNPOI.xlsx' . Willst du, dass wir versuchen, so viel wie möglich zu erholen? Wenn Sie der Quelle dieser Arbeitsmappe vertrauen, klicken Sie auf Ja.

Also nehme ich an ohne Response.End() der Stream schließt nicht richtig oder etwas? Ich fing an zu recherchieren und entdeckte, dass dies ein bekanntes Problem ist und versuchte, HttpContext.Current.ApplicationInstance.CompleteRequest() anstelle von Response.End() zu verwenden. Ich habe dies versucht und keinen Fehler vom Code erhalten, aber leider immer noch den obigen Fehler beim Versuch, die Excel-Datei zu öffnen.

Unten ist mein Code-Snippet, kann jemand eine Lösung vorschlagen, oder vielleicht eine sauberere Möglichkeit, Excel-Dateien zu exportieren?

XSSFWorkbook wb = new XSSFWorkbook(); 
XSSFSheet sh = (XSSFSheet)wb.CreateSheet("Instructional Hrs"); 

//Create Header Row 
var headerRow1 = sh.CreateRow(0); 
headerRow1.CreateCell(0).SetCellValue("Jimmy G Rocks!!"); 

using (var stream = new MemoryStream()) 
{ 
    Response.Clear(); 
    wb.Write(stream); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "ContactNPOI.xlsx")); 
    Response.BinaryWrite(stream.ToArray()); 
    Response.Flush(); 
    Response.End(); 
    //HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 
+0

Fehler konnte nicht reproduziert werden. Dein Code hat für mich funktioniert. Beachten Sie, dass [Response.End] (https://msdn.microsoft.com/en-us/library/system.web.httpresponse.end (v = vs.110) .aspx) eine 'ThreadAbortException' zu werfen normal ist – krlzlx

+0

gut Danke, dass du es versucht hast ... derselbe Code funktionierte gut in VS 2012, also weiß ich nicht, ob ich vielleicht etwas getan habe, um die Nachricht vor Jahren zu verstecken und mich nicht daran erinnere oder was. Weißt du, ob es eine bessere Möglichkeit gibt, Dateien zu exportieren, die keinen Fehler erzeugen? –

+1

Ich benutzte den gleichen Code wie Sie, um Dateien an den Client zu senden, außer dass ich ein 'Response.Close()' vor dem 'Response.End()' habe, aber ich denke nicht, dass es einen Unterschied macht. Haben Sie diese [Frage] (https://stackoverflow.com/q/20988445/1351076)? – krlzlx

Antwort

0

Vielen Dank für das @krlzlx helfen ... hier ist die Lösung, die letztlich für mich gearbeitet, das nicht einen Fehler in Visual Studio nicht werfen oder auf die Excel-Datei öffnen:

using (var stream = new MemoryStream()) 
{ 
    Response.Clear(); 
    wb.Write(stream); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "CCR Student Instructional Hours.xlsx")); 
    Response.BinaryWrite(stream.ToArray()); 
    Response.Flush(); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
    Response.Close(); 
} 

Ich sah viele Sites sagen, die Response.End() mit HttpContext.Current.ApplicationInstance.CompletelRequest() zu ersetzen, aber nur diese Zeile zu tauschen, verursachte einen Fehler beim Öffnen der Excel-Tabelle. Nachdem ich weitergespielt habe, habe ich festgestellt, dass das Hinzufügen von Response.Close() nach der CompleteRequest-Zeile den Excel-Fehler beseitigt hat, und jetzt lade ich fehlerfrei herunter !!

+0

Bitte beachten Sie, dass ich NPOI verwenden, um die Excel-Datei zu erstellen, und die Wb-Variable ist meine NPOI-erstellte Arbeitsmappe ... –

Verwandte Themen