Hallo zusammen,
hoffe alle sind bei bester Gesundheit. 😃
In meiner Firma habe ich schon so manche kleine "Hilfsapplikation" erstellt.
Bei einer solcher Applikation wird ein Excel-File erstellt und Daten hinein geschrieben, ganz simpel.
Dies funktionierte auf jedem Computer, auf welchem diese Applikation als .exe-File läuft, einwandfrei.
Jedoch gibt es einen PC, auf dem die Applikation seit ein paar Tag nicht mehr starten will.
Festgemacht habe ich dies jetzt an der folgenden Zeile Code, wenn ich diese aus-kommentiere (inkl. deren Verwendung), funktioniert es einwandfrei:
Excel.Application app = new Excel.Application();
Alle PC's sind laut Werksstandard gleich installiert, ich kann es mir nicht erklären... wenn ich Doppelklicke (egal ob die .exe auf dem Desktop liegt oder auf dem Netzlaufwerk verlinkt wird). Es zeigt kurz ein Ladesymbol, passieren tut aber nichts...
Bin auf eure Meinung gespannt. 😃
Schöne Grüße!
Hallo shazam,
Du arbeitest anscheinend mit Microsoft.Office.Interop.Excel was ein installiertes Excel benötigt.
Ist dieses auch wirklich installiert und lässt sich auf dem "Problem-PC" starten?
Als alternative kann ich Dir OpenXml empfehlen, damit kannst du viel performanter und ohne installiertes Excel eine xlsx Datei erzeugen.
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
Gruss Lhyn
Hallo Lyhn,
danke für deine Antwort.
Ja, Excel ist auf dem "Problem-PC" installiert und lässt sich auch ohne Fehler ausführen.
Ich kopiere damit ein Template und passe dann die Daten entsprechend an.
Eine Umstellung auf OpenXml hört sich doch nach einigem Aufwand an...
Geht es irgendwie zu testen, warum es nicht startet?
Vielen Dank!
Ist die selbe Excel-Version mit der selben Architektur (x86 vs. x64) installiert?
Unterschiede können zu Problemen führen - zumindest, wenn man die Interop-API nutzt.
Ansonsten kann ich das Framework ClosedXML empfehlen.
Es baut auf OpenXML auf, ist aber mMn. um Welten intuitiver aufgebaut, gerade wenn es um komplexere Anforderungen geht.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Es sollte eine Exception geworfen werden. Da steht dann, was genau das Problem ist.
Weeks of programming can save you hours of planning
Es wird eben keine Exception geworfen - wie muss ich diese aufbauen, dass mir ein Fehler angezeigt wird?
Vielen Dank!
Im einfachsten Fall so - normalerweise sollte der Fehler aber in einer Logdatei gespeichert werden. Dies ist wirklich nur als Minimalbeispiel zu verstehen.
try
{
Excel.Application app = new Excel.Application();
}
catch(Exception exp)
{
MessageBox.Show(exp.message, "Exception Excel Aufruf", MessageBoxButtons.OK);
}
Die Fehlermeldung konnte ich jetzt herausfinden:
Die COM-Klassenfactory für die Komponente mit CLSID {00024500-0000-0000-C000-000000000046} konnte aufgrund des folgenden Fehlers nicht abgerufen werden: 80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Was könnt die Ursache sein?
Vielen Dank!
So, ein Microsoft-Update hat das Problem gerade gelöst...
Was lernt man: einfach abwarten...
Danke euch allen!