Hallo,
Ich hab ein utility geschrieben, das Daten aus Excel bearbeitet. Wenn ich jetzt nun gleichzeitig selbst was in Excel bearbeiten moechte, also eine andere Excel Datei oeffne stuerzt mein Programm ab und ich bekomme meine exception.
hat jmd. eine idee wie ich das aendern kann? ich meine es kann ja nicht sein, dass ich dan excel nicht verwenden kann oder?
Danke schoneinmal fuer die Anregungen.
Tom
Hallo Tschebbe,
wie ist den die Exception?
mfg.
markus111
naja die Exception ist eine von mir programmierte:
try
{
Console.WriteLine(path);
// Start Excel and get Application Object
object m = System.Reflection.Missing.Value;
/*Excel.Application*/
this.oXL = new Excel.Application();
this.oXL.Visible = true;
this.oXL.UserControl = true;
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
this.oWB = this.oXL.Workbooks.Open(path, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
//Settings for RTF-File
writeString2file(rtfsettings);
// Alle items which has in Difference != 0
header(oWB);
difference(oWB);
added(oWB);
deleted(oWB);
checkRevs(oWB);
if (this.refdes)
{
checkDesignators(oWB);
}
// TEST AML
//aml(oWB, "10231297");
// Write end of file
writeString2file("\\par}");
// Close EXCLE
oXL.Quit();
Marshal.ReleaseComObject(oWB);
Marshal.ReleaseComObject(oSheet);
Marshal.ReleaseComObject(oXL);
oWB = null;
oSheet = null;
oXL = null;
}
catch (System.Runtime.InteropServices.COMException ce)
{
MessageBox.Show("Error during opening the Excel import file!", ce.Message);
Console.WriteLine("{0}", ce);
}
ich hab gerade gemerkt, dass die aber nur der fall ist, wenn ich eine neue datei oeffne, wenn ich in bereits geoeffnetten dateien arbeite oder diese speichere ist das meinem program egal.
Sorry, aber ich kann dir nicht folgen... Und Verstehen auch nicht 😜
Deine eigene Exception wird ausgelößt und du fragst warum?
mfg.
markus111
Kann ich nur zustimmen...
Da sind aber auch noch andere Sachen schräg. Das Freigeben der Ressourcen solltest Du bspw. in ein finally auslagern
catch(...)
{...}
finally
{
Marshal.ReleaseComObject(oWB);
Marshal.ReleaseComObject(oSheet);
Marshal.ReleaseComObject(oXL);
}
Solltest Du zur Zeit vorher in eine Exception rennen, was ja der Fall ist, wird dieser Code gar nicht mehr aufgerufen 8o und Du hast Speicherleichen.
Die eigene Exception ist hier nirgends zu sehen, dafür aber ein Haufen kryptischer Variablennamen.
Von wo wird denn genau die Exception geworfen? Die konkrete Meldung mit einem StackTrace wäre sicherlich hilfreich.
Gruss,
Jan
ok, also das mit den ressourcen freigeben macht natuerlich Sinn.
Kryptische Variabeln:
oWB = Excel Workbook
oSheet = Excel Sheet
oXL = Excel Application
Diese ganze Block ist meine Exception. Das Problem ist quasi das ich Methoden habe:
header(oWB);
difference(oWB);
added(oWB);
deleted(oWB);
checkRevs(oWB);
checkDesignators(oWB);
welche in dem Excel File arbeiten. Wenn ich solange der prozess laeuft eine weitere Excel file aufmache, kann es sein / muss aber nicht. Das mein Programm einfach so abstuerzt.
Werde evtl. heute nachmittag an dem Problem weiter arbeiten. Wo kann ich mir die Stack Trace anschauen? Und welche Vorteile habe ich dann?
Ich hab selbst noch nicht soviel Fehler suche betrieben, da ich bisher nur uebungs aufgaben Programmiert habe und die immer recht simpel waren.
Danke Tomtom