Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
28.01.2020, 09:18 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2020 09:24 von TpunktN.)
Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
Servus zusammen,
ich darf mal wieder alte Software auf neue Wünsche anpassen und habe diese vorher ein wenig optimiert.
Jetzt bin ich mir aber mit den Referenzen nicht sicher, wann müssen die auf bleiben und wann kann bzw. muss ich die Schließen?
Zum Beispiel die erste Referenz zur Application links oben in '1_Excel2alles_snip', die Referenz war ursprünglich direkt wieder geschlossen worden. Hat zwar funktioniert, aber ich wollte mal lernen wie es richtig oder besser gemacht werden kann.
Bisher schließe ich einfach die Referenzen ganz am Schluss, habe da aber die '#fraglich'-Kommentar bedenken, das die Referenz gar nicht geschlossen wird, wenn dann zwischendrin ein Fehler anliegt (Fehler löschen vorher und Fehler separat auswerten?)
Vom Vorgänger habe ich übernommen, die niedrigste Referenz zu schließen, wenn ich mit der Aufgabe fertig bin ('2D_in_Excel_snip' erstellt eine Value Referenz)
Meine Erkenntnis bisher, wenn mit der Referenz nichts mehr angestellt wird, kann ich diese schließen, ist das Richtig? Oder führt das zu Problemen?
Zusatzfrage, gibt es eine bessere/schönere Möglichkeit ein Cluster in ein Array zu formatieren als in '3_Clsuter2Array_snip'? Die Funktion 'Cluster to Array' funktioniert hier nicht, im Cluster sind Arrays und untershiedliche Datentypen.
MfG Timo
Anhang:
3 Bilder, die ausreichen sollten mein Referenz und Cluster problem zu veranschaulichen.
1 ZIP mit dem kompletten SubVI in , für details.
Edit 10' später: Zwischen Screenshot und hochladen habe ich kleine Änderungen gemacht (_Worksheet.Name gibt es nicht mehr, das Tabellenblatt heißt bereits so und im Cluster2Array kam noch ein Cluster hinzu)
Justieren ist dem Gerät sagen was es anzeigen soll, kalibrieren ist die Kontrolle dieser Anzeige. Eichen ist ein längerer Prüfprozess und darf nur das Eichamt!
RE: Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
Hallo,
Referenz-Reihenfolge sieht im großen und ganzen gut aus. Genauso gehört sich das bei Excel, die Referenzen in der umgekehrten Reihenfolge schließen wie sie geöffnet wurden, und am besten dann, wenn man sie nicht mehr braucht, dann vergisst man es nicht. Deine Aussage
Zitat:wenn mit der Referenz nichts mehr angestellt wird, kann ich diese schließen
stimmt aber nicht, du musst schon die Klassenhierachie beachten. Workbook erst schließen, wenn alles darunter geschlossen ist, etc.pp.
Zu deiner Error-In Frage: s. ausführliche Hilfe zu Close Reference:
Zitat:This node runs normally even if an error occurred before this node runs.
Zu deiner Cluster to Array:
Man kann sich sicher etwas programmieren, bei dem man durch alle Elemente des Clusters geht, den Datentyp auswertet und dann je nachdem entsprechend in einen String umformatiert. Ob es das Wert ist, das musst du entscheiden.
Eine wunderbare Race-Condition hast du dir beim Parsen deiner Enums erstellt. Gleichzeitiges Schreiben des Indicator und Auslesen der PropertyNode - ein einfaches FormatIntoString langt hier völlig.
Anbei ein Screenshot, der die Idee zu "Cluster to Array" veranschaulichen soll:
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
Hallo Timo,
Tipps am Rande:
1. Bündel einfach alle Excel Referenzen in einem Cluster. Dann hast du später nicht X Referenzen, welche du durch verbinden musst, sondern nur ein Cluster. Wenn man die Namen vernünftig nach Funktion vergibt, dann ist es später auch übersichtlich was wo passiert.
2. Mit Strg + LM + Maus bewegen kann man sich super Platz im Blockdiagramm verschaffen.
3. Mit Strg + Alt + LM + Maus ziehen kann man alles etwas kompakter bekommen.
Zum Schließen der Referenzen:
Es ist zum Glück bei ActiveX und Excel nicht so tragisch, wenn mal eine Referenz offen bleibt. Deswegen mache ich die Referenzen auch erst am Ende des Programms zu. Ausnahmen sind hier die Referenzen auf die Zellen, da man diese selten mehrfach benötigt und diese auch schnell wieder geöffnet sind.
RE: Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
(28.01.2020 10:19 )MaxP schrieb: Zum Schließen der Referenzen:
Es ist zum Glück bei ActiveX und Excel nicht so tragisch, wenn mal eine Referenz offen bleibt. Deswegen mache ich die Referenzen auch erst am Ende des Programms zu.
Dem widerspreche ich, da müllt man sich schnell den Speicher voll !!! Alles schon selber erlebt !
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
Danke für die schnellen Antworten.
(28.01.2020 09:50 )jg schrieb: ...
Eine wunderbare Race-Condition hast du dir beim Parsen deiner Enums erstellt.
Uh, danke, das hätte stunden an suchen werden können, ist behoben.
Zitat:An bei ein Screenshot, der die Idee zu "Cluster to Array" veranschaulichen soll
Das muss ich mir mal genauer anschauen und bissle rumprobieren, werde ich aber wohl hier jetzt nicht verwenden.
Zitat:Tipps am Rande:
1. Bündel einfach alle Excel Referenzen in einem Cluster. Dann hast du später nicht X Referenzen, welche du durch verbinden musst, sondern nur ein Cluster. Wenn man die Namen vernünftig nach Funktion vergibt, dann ist es später auch übersichtlich was wo passiert.
Ich finde das so übersichtlich, kann mir aber auch gerade nciht so wirklich vorstellen was du damit meinst.
Zitat:Zum Schließen der Referenzen:
Es ist zum Glück bei ActiveX und Excel nicht so tragisch, wenn mal eine Referenz offen bleibt. Deswegen mache ich die Referenzen auch erst am Ende des Programms zu. Ausnahmen sind hier die Referenzen auf die Zellen, da man diese selten mehrfach benötigt und diese auch schnell wieder geöffnet sind.
Sehe ich bei mir hier auch so, es wird Excel nur 2x geöffnet und vom Benutzer dann geschlossen, aber ich will ja lernen und es richtig machen, um bei größeren Projekten keine Probleme zu haben.
Zwar habe ich jg's Antwort als Lösung markiert, da es meine Frage beantwortet, gerne lese ich mir aber mehr Tipps durch
MfG Timo
Justieren ist dem Gerät sagen was es anzeigen soll, kalibrieren ist die Kontrolle dieser Anzeige. Eichen ist ein längerer Prüfprozess und darf nur das Eichamt!
RE: Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
(28.01.2020 10:44 )jg schrieb: [quote='MaxP' pid='195986' dateline='1580203146']
Zum Schließen der Referenzen:
Es ist zum Glück bei ActiveX und Excel nicht so tragisch, wenn mal eine Referenz offen bleibt. Deswegen mache ich die Referenzen auch erst am Ende des Programms zu.
@Jens:
Wenn zitieren, dann bitte komplett. Die Referenzen zum Schreiben auf die Zellen werden ja direkt nach der Nutzung geschlossen. Viele Referenzen können da also nicht hängen bleiben. (Es sei denn man arbeitet mit zig Arbeitsmappen mit zig Blättern, aber das werden wohl kaum viele machen.) Was soll da noch großartig Speicher benötigen?
@Timo:
Ich habe dir mal ein Beispiel für das Cluster angehängt. So kann man sich mit "bundel by name" oder "unbundle by name", die benötigten Referenzen holen oder weitergeben. Verringert den Verdrahtungsaufwand enorm.
RE: Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
(28.01.2020 12:52 )MaxP schrieb:
(28.01.2020 10:44 )jg schrieb: [quote='MaxP' pid='195986' dateline='1580203146']
Zum Schließen der Referenzen:
Es ist zum Glück bei ActiveX und Excel nicht so tragisch, wenn mal eine Referenz offen bleibt. Deswegen mache ich die Referenzen auch erst am Ende des Programms zu.
@Jens:
Wenn zitieren, dann bitte komplett. Die Referenzen zum Schreiben auf die Zellen werden ja direkt nach der Nutzung geschlossen. Viele Referenzen können da also nicht hängen bleiben. (Es sei denn man arbeitet mit zig Arbeitsmappen mit zig Blättern, aber das werden wohl kaum viele machen.) Was soll da noch großartig Speicher benötigen?
Bis zum ersten Prüfstandsprogramm, bei dem genau das gemacht wird, zig Arbeitsmappen werden geöffnet und gelesen, da das Programm 24/7 läuft.
Nicht etwas programmieren, vom dem man weiß, dass es prinzipiell ein Speicherleck ist - auch wenn es nur 4 Byte für eine Referenz sind.
Ich bin schon zu oft in diese Falle getappt.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: Wann schließe ich (ActiveX, Excel) Referenzen? + wie Cluster to Array?
(28.01.2020 12:52 )MaxP schrieb: @Timo:
Ich habe dir mal ein Beispiel für das Cluster angehängt. So kann man sich mit "bundel by name" oder "unbundle by name", die benötigten Referenzen holen oder weitergeben. Verringert den Verdrahtungsaufwand enorm.
Gruß Max
Danke, wenn man das sauber und übersichtlich in SubVIs programmiert, sieht das sicher besser aus Werde mich da gleich mal ran setzen.
(28.01.2020 09:50 )jg schrieb: Zu deiner Cluster to Array:
Man kann sich sicher etwas programmieren, bei dem man durch alle Elemente des Clusters geht, den Datentyp auswertet und dann je nachdem entsprechend in einen String umformatiert. Ob es das Wert ist, das musst du entscheiden.
Habe ich mal ausprobiert, funktioniert soweit, ob das sinnvoll ist, muss ich dann mal schauen, vielleicht anhand des Elementnames sortieren oder so..
Aber hierzu gleich eine Frage bezüglich Referenzen, wie ist es hier mit dem Schließen? Jede Invoke- oder Property-Node, wie bei den ActiveX? Hierachisch, die niedrigste zuerst, wenn Sie nicht mehr gebraucht wird?
Anhang
Bilder als snippet
VI in konvertiert
Justieren ist dem Gerät sagen was es anzeigen soll, kalibrieren ist die Kontrolle dieser Anzeige. Eichen ist ein längerer Prüfprozess und darf nur das Eichamt!
Kurz: Refnums von LabVIEW-Controls brauchst du nicht unbedingt schließen.
Zwecks Cluster to String-Array (den auf nichts anderes läuft das beim Schreiben zu Excel hinaus):
Da kannst du dir ganz viele Methoden ausdenken:
* Die Daten werden alphabetisch an Hand der Element-Namen sortiert
* Eine Nachschlagliste, die die Reihenfolge definiert
* Eine erweitere Nachschlagliste, die auch noch das Format von Zahlen/Datum o.ä. definiert
usw. usw. usw.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Kurz: Refnums von LabVIEW-Controls brauchst du nicht unbedingt schließen.
Danke, gut zu wissen. Sonst würde es diverse VIs auch sehr aufblasen, glaube ich.
interessant finde ich auch direkt 2 Biträge später das man die (Nicht wörtlich nehmen!) gar nicht geschlossen bekommt
Justieren ist dem Gerät sagen was es anzeigen soll, kalibrieren ist die Kontrolle dieser Anzeige. Eichen ist ein längerer Prüfprozess und darf nur das Eichamt!