[GELÖST] Letzte gefüllte Zelle einer Spalte, nicht der Tab?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Entchen19
*
Beiträge: 18
Registriert: Do, 15.12.2011 22:10

[GELÖST] Letzte gefüllte Zelle einer Spalte, nicht der Tab?

Beitrag von Entchen19 »

Hallo zusammen,

ich weiß, dass diese Frage schon hundert mal gestellt worden ist, aber ich habe trotzdem die Lösung für mein spezifisches Problem nicht gefunden, daher erneut.

Der folgende Code ermittelt mir die letzte gefüllte Zelle in einem Arbeitsblatt bzw. die erste leere durch das +1

Code: Alles auswählen

oRange = oSheet.getCellRangeByName("F1")
	    oCursor = oSheet.createCursorByRange(oRange)
	    oCursor.gotoEnd
	    oAddress = oCursor.RangeAddress
            iSchluss3 = oAddress.endRow + 1
Was ich aber haben möchte, ist die letzte mit Werten gefüllte Zelle NUR DIESER SPALTE?!?!
Der Code scheint den Bereich, also die Spalte F1 komplett zu ignorieren und sucht stur über das gesamte Arbeitsblatt, was ich gerade nicht möchte :evil:

Ich habe es schon so probiert, aber auch kein Erfolg:

Code: Alles auswählen

oRange = oSheet.getCellRangeByName("F1")
	    oCursor = oSheet.createCursorByRange(oRange)
	    oCursor.gotoEndofUsedArea(true)
	    oAddress = oCursor.RangeAddress
            iSchluss3 = oAddress.endRow + 1

Wo ist mein Denkfehler?

Bin für Tipps dankbar.

EDIT: Ok, ich habe jetzt herausgefunden, dass der Code doch funktioniert, es muss also an den Daten liegen bzw. denkt Calc, dass die Zellen noch irgendwie ... genutzt werden?
In die Spalte wird vorher etwas per Spezialfilter kopiert aus einer anderen Spalte, dabei die Duplikate verworfen, es scheint, das Calc hier irgendwie die verworfenen Zellen immer noch als gefüllt ansieht oder irgendwie so, dass er mir dann quasi nicht mehr 40 Zellen als gefüllt ansieht, sondern noch 300 oder so.

Wie bekomme ich das denn hin, also ich müsste quasi nur auf Vorhandensein eines Inhaltes abfragen, denn die Zellen sind definitiv leer.

LG
Entchen
Zuletzt geändert von Entchen19 am Mo, 02.01.2012 14:03, insgesamt 1-mal geändert.
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Letzte gefüllte Zelle einer Spalte, nicht der Tabelle?

Beitrag von balu »

Hallo Entchen,

eins vorweg, mit dem herausfinden der letzten benutzten Zelle innerhalb eines Bereiches tu ich mich selber schwer. Ich versteh da auch noch so einiges nicht.
es scheint, das Calc hier irgendwie die verworfenen Zellen immer noch als gefüllt ansieht oder irgendwie so, dass er mir dann quasi nicht mehr 40 Zellen als gefüllt ansieht, sondern noch 300 oder so.
Welches ist denn die letzte benutzte Spalte, ist es die F?
Denn wenn F nicht die letzte Spalte ist, sondern z.B. K, dann wird nämlich von K die letzte Zelle zurückgegeben. Es spielt nämlich dabei keine Rolle ob Du bei getCellRangeByName F1 oder B1 angibst, es wird die letzte Spalte ausgewertet. (bezogen auf den 2. code)

Wie Du das Problem jetzt aber lösen kannst, weiß ich auch noch nicht.
Was für Koordinaten bekomnmst Du den mit dem Beispielcode von Dannenhöfer angezeigt?
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig214



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Entchen19
*
Beiträge: 18
Registriert: Do, 15.12.2011 22:10

Re: Letzte gefüllte Zelle einer Spalte, nicht der Tabelle?

Beitrag von Entchen19 »

Hallo Balu,

das beruhigt mich ja schon einmal, dass nicht nur ich da Probleme mit habe ;-)

Bevor ich die letzte gefüllte Zelle der Spalte F herausfinden möchte, bestücke ich die Spalten G1 - variable Spalte mit Werten.
Davor ziehe ich mir die letzte gefüllte Zelle eines anderen Arbeitsblattes in einen zweiten Cursor und davor führe ich den erwähnten Spezialfilter aus von Spalte A in Spalte F ohne Duplikate.

Müsste ich nach deinen Infos den Cursor erst auf die Spalte irgendwie bewegen und dann das Ende erfragen?

Mit dem Beispielcode holt er mir die EndeZelle und Spalte aus dem ersten Arbeitsblatt der ganzen Datei, dadrin bewege ich mich aber gerade gar nicht ...

Wenn ich es dann mit getcursorbyrange wieder auf meine Bedürfnisse matche, dann geht er zwar auf die Spalte F1, rutscht dann aber bei gotoend auf die letzte gefüllte Spalte rüber und schaut da nach, aber das will ich ja nicht, ich willl ja von der expliziten Spalte die Werte habe ...

Das muss doch auch ohne den Dispatcher gehen ...

LG
Entchen, die da etwas ratlos vorsteht ...
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Letzte gefüllte Zelle einer Spalte, nicht der Tabelle?

Beitrag von Stephan »

Was ich aber haben möchte, ist die letzte mit Werten gefüllte Zelle NUR DIESER SPALTE?!?!
z.B. nutze die Methode .queryEmptyCells (http://www.openoffice.org/api/docs/comm ... EmptyCells):

Code: Alles auswählen

Sub Main
  With ThisComponent.Sheets().getByIndex(0)
    x = .Columns(5).queryEmptyCells() 'Spalte F
    Msgbox x(x.Count-1).RangeAddress.StartRow - 1
  End With
End Sub
oder, wenn es wirklich nur um Werte ginge .queryContentCells:

Code: Alles auswählen

Sub Main
  With ThisComponent.Sheets().getByIndex(0)
    x = .Columns(5).queryContentCells(1)
    Msgbox x(x.Count-1).RangeAddress.EndRow
  End With
End Sub


Gruß
Stephan
Entchen19
*
Beiträge: 18
Registriert: Do, 15.12.2011 22:10

Re: Letzte gefüllte Zelle einer Spalte, nicht der Tabelle?

Beitrag von Entchen19 »

Stephan,

genau das habe ich gesucht, so klappt es prima :-)
Vielen Dank !!!

Code: Alles auswählen

x = oSheet.Columns(5).queryEmptyCells() 'Spalte F
	 iSchluss3 = x(x.Count - 1).RangeAddress.StartRow + 1
Jetzt kann ich endlich weitermachen und hoffe, die Diagramme per Basic zeichnen zu lassen ist nicht so kompliziert wie bei Excel :shock:

LG
Entchen
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: [GELÖST] Letzte gefüllte Zelle einer Spalte, nicht der T

Beitrag von balu »

Hallo Stephan,

deine Beispiele sind klasse! Danke schön! Werd ich mir gut aufheben :).


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten