Laden...

Excel - selbst arbeiten und programm C# code ausfuehren geht nicht

Erstellt von Tschebbe vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.925 Views
T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren
Excel - selbst arbeiten und programm C# code ausfuehren geht nicht

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

479 Beiträge seit 2008
vor 14 Jahren

Hallo Tschebbe,

wie ist den die Exception?

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren

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.

479 Beiträge seit 2008
vor 14 Jahren

Sorry, aber ich kann dir nicht folgen... Und Verstehen auch nicht 😜

Deine eigene Exception wird ausgelößt und du fragst warum?

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
D
8 Beiträge seit 2008
vor 14 Jahren

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

T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren

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