LabVIEWForum.de - Aus Excel Letzte Zeile und Letzte Spalte auslesen und Formeln ausgeben

LabVIEWForum.de

Normale Version: Aus Excel Letzte Zeile und Letzte Spalte auslesen und Formeln ausgeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo

Ich habe mir aus verschiedenen ActiveX-VIs ein eigenes erstellt das folgende Aufgabe hat:

(Zunächst: Dieses VI läuft in einer Schleife, in der mit dem Report Generation Toolkit die Worksheets einer Excel-Datei durchgelaufen werden. In dieser SchleifeSmile

1.) Bestimme die letzte Zeile und die letzte Spalte des aktiven Excel-Worksheets
2.) Lese die Formeln jeder Zelle in dem Bereich von 0,0 bis zur letzten Spalte/Zeile aus und gebe diese aus.

Leider funktioniert es nicht, denn es werden nur die Formeln im Bereiche des ersten Worksheets ausgegeben. Beim zweiten Worksheet stimmt die Angabe der letzten Spalte/Zeile also nicht, sondern sind die Werte aus dem ersten Worksheet.
Das seltsame ist allerdings: Wenn ich nur den ersten Teil (letzte Spalte/Zeile) aus der Schleife in ein Array ausgeben lasse stehen dort für jeden Schleifendurchlauf die richtigen Werte der letzten Spalte/Zeile drin. Auch die Sonde innerhalb des VIs zeigt mir die richtigen Werte an.

Wenn ich den zweiten Teil mit den Formeln verwende, funktioniert auch dieser, wenn ich z.B. zwei feste Konstanten an den Eingang vorgebe. Ich kann einfach nicht verstehen, warum es in der Kombination nicht funktioniert?

Im Anhang ist ein Bild des VIs

Viele Grüße,
Tuvok
Hallo Tuvok,

Zitat:Leider funktioniert es nicht, denn es werden nur die Formeln im Bereiche des ersten Worksheets ausgegeben.
Laut deiner eigenen Beschreibung liest du den ActiveRange des ActiveSheets - und das scheint das erste Sheet in deinem Workbook zu sein.
Leider ist nirgends zu sehen, ob/wie du das ActiveSheet änderst!

Von Aufräumen hälst du nicht viel, oder? Wink
Aufräumen?Rolleyes

Zum besseren Verständnis habe ich die Beispiele angehängt

Grüße,
Tuvok
Hallo Tuvok,

Profil_ergaenzen, wenn du jetzt mit LV2013 arbeitest!

Leider fehlt noch dein subVI!

Zitat:Aufräumen?
Ja! Einfach Ctrl-U drücken!

- Warum InsertIntoArray und ein Schieberegister? Warum nicht einfach Autoindizierung am Schleifenrand?
- Problem: In einem LabVIEW-3D-Array sind alle Seiten (=Sheets) gleich groß! Dein 3D-Array wird demnach die Größe deines größten Sheets zum Schluss haben! Wenn du das nicht willst, musst du ein Array of Cluster of 2D-Array erstellen!
Hallo GerdW

Danke für die bisherigen Rückmeldungen.
Dass das 3D Array unterschiedlichen Größen hat ist ok. Das habe ich berücksichtigt. Da manche Excel-Dateien teilweise sehr viele Worksheets haben, mache ich das lieber über ein großes 3D Array, als über viele 2D-Arrays. Das 3D-Array ist quasie mein Speicherinhalt.

Ja, die Autoindizierung für das 3D-Array ist besser! Danke! Ist historisch gewachsen!

Hier die SubVIs (inklusive Bild) Das Bild des anderen SubVIs ist bereits oben dargestellt.

Fragt sich noch warum die Kombination aus Bestimmung der letzten Zeile/Spalte und auslesen der Formeln nicht klappt.

Viele Grüße,
Tuvok
Hallo Tuvok,

Zitat:Fragt sich noch warum die Kombination aus Bestimmung der letzten Zeile/Spalte und auslesen der Formeln nicht klappt.
Erst holst du dir vom ActiveSheet den benutzten Bereich. Dann schließt du alles, inkl. des Sheets.
Dann liest du von der Application einen Range ein!?
Warum liest du nicht vom schon geöffneten Worksheet einfach den gewünschten Bereich???

Zitat:Da manche Excel-Dateien teilweise sehr viele Worksheets haben, mache ich das lieber über ein großes 3D Array, als über viele 2D-Arrays. Das 3D-Array ist quasie mein Speicherinhalt.
Dann hast du nur das Problem, dass ein 3D-Array mehr zusammenhängenden freien Speicher benötigt als ein Array of Cluster of 2D-Array!
Und wenn deine Worksheets sehr unterschiedliche Größen haben, verbraucht ein 3D-Array auch noch jede Menge Speicher, da LabVIEW alle Seiten gleich groß macht - so groß wie die größte Seite!
Hallo GerdW

Danke schon mal.

Ok, ich werde mal schauen wie ich das machen kann. Wie eingangs erwähnt, handelt es sich bei dem VI um eine Kombination aus zwei VIs, die jeweils für sich funktionieren, aber nicht zusammen, was ich um Moment noch nicht verstehen kann. Auch wenn ich das Sheet schließe ist die Info der letzten Zeile/Spalte verfügbar und das Auslesen der Formeln funktionier ja auch. Also gelöst ist das noch nicht.

Ja, ein bisschen Speicher kann ich mit einem Cluster von 2D-Arrays einsparen, aber das bisschen ist es nicht wert. Trotzdem werde ich es mir mal aus Spaß anschauen.

Viele Grüße,
Tuvok
Hallo Tuvok,

warum machst du das nicht wie in VBA auch:
Code:
Workbook öffnen
   Worksheet selektieren/öffnen
      Range im Sheet bestimmen
      Range lesen
   Worksheet schließen
Workbook schließen
(jede Einrückung kennzeichnet eine Schleife.)
Hallo GerdW

Danke schon mal für die Kommentare.
Worauf beziehen sich diese? Auf das SubVI? Da mache ich das doch gerade (bis auch die Schleifen, ich muss es im Sub-VI ja nur einmal ausführen). Und was ist dann mit dem Auslesen der Formeln? Das hast Du nicht erwähnt.

Wenn Du Dich auf das VI beziehst, indem dies ausgeführt werden muss, muss ich ja noch all die anderen Funktionalitäten berücksichtigen. Dann sind Deine Angaben etwas zu dürftig?
Was meinst Du?

Viele Grüße,
Tuvok
Hallo

Ich habe das Problem gelöst. Im Grunde hatte es nichts mit dem Report Generation Toolkit oder ActiveX zu tun, sondern daran dass das 3D-Array gar nicht vergrößert wird, wenn etwas auf der nächsten Seite (Page) eingefügt wird, sondern die Größe von der ersten Seite beibehalten wird.
Mit Clustern zu arbeiten mag ich nicht besonders und geht hier auch nicht, da es bei Clustern wesentlich schwieriger ist automatisch zu initiieren usw.
Aber die Lösung ist hier (ganz einfach und wie von GerdW schon angegemerkt) nicht in die Schleife über das Schieberegister einzufügen, sondern das 3D-Array einfach autoindizieren zu lassen (siehe Bild)

Viele Grüße,
Tuvok
Referenz-URLs