Warum bin ich immer ein Out of Memory " - Fehlermeldung zu tun ASP .NET Excel-Interop?

Diese war arbeiten..und ich zog die Entsorgung code des finally-Blocks, und jetzt scheitert es jedes mal.

Ich habe eine test Tabelle mit 4 records, 6 Spalten lang. Hier ist der code, den ich verwende, um es in. Das ist ASP .Net 3.5 auf IIS 5 (mein pc) und auf IIS 6 (web-server).

Bläst er bis auf die Zeile rechts, bevor der Haken: "values = (object [,]) - Bereich.Wert2;" mit der folgenden Fehlermeldung:


11/2/2009 8:47:43 AM :: Not enough storage is available to complete this operation. (Exception from HRESULT: 0x8007000E (E_OUTOFMEMORY))

Irgendwelche Ideen? Vorschläge? Ich habe die meisten dieser code von codeproject, also ich habe keine Ahnung, ob dies der richtige Weg, um die Arbeit mit Excel. Vielen Dank für jede Hilfe können Sie zur Verfügung stellen.

Hier ist mein code:

Excel.ApplicationClass app = null; 
Excel.Workbook book = null; 
Excel.Worksheet sheet = null; 
Excel.Range Range = null; 

object[,] Werte = null; 

versuchen 
{ 
//Konfigurieren Von Excel 
app = new Excel.ApplicationClass(); 
app.Sichtbar = false; 
app.ScreenUpdating = false; 
app.DisplayAlerts = false; 

//Öffnen Sie eine neue Instanz von excel mit der hochgeladenen Datei 
Buch = app.Arbeitsmappen.Open(Pfad); 

//Den ersten Arbeitsblatt im Buch 
Blatt = (Excel.Worksheet)book.Worksheets[1]; 

//Beginnen mit der ersten Zelle der zweiten Zeile 
range = sheet.get_Range("A2", Missing.Wert); 

//Alle Zellen in die richtige 
range = range.get_End(Excel.XlDirection.xlToRight); 

//Alle Zellen nach unten 
range = range.get_End(Excel.XlDirection.xlDown); 

//Adresse der unteren rechten Zelle 
string downAddress = range.get_Address(false, false, Excel.XlReferenceStyle.xlA1, Type.Fehlt, Geben.Fehlt); 

//Holen Sie sich die vollständige Palette an Daten 
range = sheet.get_Range("A2", downAddress); 

//2d-array mit allen Daten 
values = (object [,]) - Bereich.Wert2; 
} 
catch (Exception e) 
{ 
LoggingService.log(e.Message); 
} 
schließlich 
{ 
//Aufräumen 
range = null; 
sheet = null; 

if (book != null) 
Buch.Close(false, Missing.Wert Fehlt.Wert); 

Buch = null; 

if (app != null) 
app.Quit(); 

app = null; 
} 

return Werte; 
Arbeiten mit Excel aus ASP.NET ist nach ärger. Die COM-Komponenten wurden nicht speziell für die Arbeit in einer Multithread-Umgebung.
Oder irgendwelche server-Umgebung für diese Angelegenheit. Office-interop-office-Makros auf Steroide - Sie kann verwendet werden, für den programmgesteuerten Zugriff auf office-Dokumente, aber es ist nicht eine sehr robuste Art und Weise, es zu tun.
Fair genug. Dies erfordert möglicherweise eine andere Frage, aber wie würden Sie gehen zu lassen, ein Benutzer hochladen .xls-Dokument abrufen der Werte aus? Ich würde denken, es wäre schwer, um Sie in ein flat file...
dies ist leicht erreichbar mit ADO.NET und OleDb - mein internet ist ein bisschen schlecht atm, aber dies sollte Ihnen eine Vorstellung- davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx
Wiert Pluimers. Leider nicht - das könnte nützlich sein, wenn: support.microsoft.com/kb/316934/en-us#12

InformationsquelleAutor IronicMuffin | 2009-11-02

Schreibe einen Kommentar