[GELÖST] Daten aus einem Tabellenblatt Cursor lesen.

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

Moderator: Moderatoren

Liegeflitzer
Beiträge: 6
Registriert: Do, 27.01.2011 21:23

[GELÖST] Daten aus einem Tabellenblatt Cursor lesen.

Beitrag von Liegeflitzer »

Hallo Zusammen,

ich versuche mich mit Hilfe des Buches "Makros in OOo 3" in die Makroprogrammierung einzuarbeiten und mir raucht gerade der Kopf :cry:

Ich möchte aus einem Tabellenblatt abhängig von einer Startzelle einen Datenbereich in ein Array einlesen. Da unterhalb der zu ändernden Daten noch Berechnungen stehen wollte ich den Bereich über createCursorbyRange ermitteln, bekomme aber keine Daten heraus.
Folgendes Funktioniert (und habe ich glaube ich auch verstanden :) )

Code: Alles auswählen

oBereich = oTabPersonen.getCellRangeByName("A2:I46")
aDaten = oBereich.getDataArray()
Da aber noch weitere Zeilen eingefügt werden können (auch per Hand) möchte ich den Bereich aber nicht hart verdrahten. Deshalb habe ich an folgendes gedacht:

Code: Alles auswählen

'Als Startzelle
oZellAdresse = oTabPersonen.getCellRangeByName("A2")
oBereich = oTabPersonen.createCursorbyRange(oZellAdresse)
aDaten = oBereich.getDataArray()
Ich bekomme aber keine Daten in das Array!
Obwohl

Code: Alles auswählen

oBereich.gotoEnd()
nSpalte = oBereich.getRangeAddress.endColumn
nZeile = oBereich.getRangeAddress.endRow
msgbox nSpalte & " "  & nZeile
mir zeigt das der gewählte Bereich der gewünschte ist (alles bis zur ersten leeren Zelle umgebene)

Gibt es eine Möglichkeit die Daten aus dem per CursorbyRange gewählten Bereich direkt auszulesen? Oder muss ich das irgend wie in das getCellRange reinfrimeln? Wenn letzteres wie geht das?

Vielen Dank im voraus.
Gregor
Zuletzt geändert von Liegeflitzer am Do, 10.02.2011 20:30, insgesamt 1-mal geändert.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Daten aus einem Tabellenblatt Cursor lesen.

Beitrag von DPunch »

Aloha

Also Du willst alle Daten aus dem Tabellenblatt einlesen, bis zur letzten Zeile und Spalte?
Oder vom Startpunkt an bis zur ersten leeren Zelle?

Ersteres sähe so aus:

Code: Alles auswählen

	oCursor = oTabPersonen.createCursor
	oCursor.gotoEndofUsedArea(False)
	oRange = oTabPersonen.getCellRangeByPosition(0,1,oCursor.RangeAddress.EndColumn,oCursor.RangeAddress.EndRow)
	aDaten = oRange.getDataArray
zweiteres so

Code: Alles auswählen

	oZellAdresse = oTabPersonen.getCellRangeByName("A2")
	oBereich = oTabPersonen.createCursorByRange(oZellAdresse)
	oBereich.gotoEnd
	oAdd = oBereich.RangeAddress
	oRange = oTabPersonen.getCellRangeByPosition(0,1,oAdd.EndColumn,oAdd.EndRow)
	aDaten = oRange.getDataArray
(...)mir zeigt das der gewählte Bereich der gewünschte ist (alles bis zur ersten leeren Zelle umgebene)
Nein, das ist wenn überhaupt die letzte Zeile des gewünschten Bereichs.
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Daten aus einem Tabellenblatt Cursor lesen.

Beitrag von Axel Richter »

Hallo Ihr beiden,

man kann das DataArray auch direkt aus dem Cursor lesen.

Code: Alles auswählen

oZellAdresse = oTabPersonen.getCellRangeByName("A2")
oCursor = oTabPersonen.createCursorbyRange(oZellAdresse)
'oCursor.gotoStartOfUsedArea(False) 'das scharf machen, wenn Zeile 1 mit gelesen werden soll
oCursor.gotoEndOfUsedArea(True)
aDaten = oCursor.getDataArray()
xray aDaten
viele Grüße

Axel
Liegeflitzer
Beiträge: 6
Registriert: Do, 27.01.2011 21:23

Re: Daten aus einem Tabellenblatt Cursor lesen.

Beitrag von Liegeflitzer »

Warum hat er mich den jetzt raus geschmissen?
Das war mein Beitrag da oben :)

Gregor
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: Daten aus einem Tabellenblatt Cursor lesen.

Beitrag von Axel Richter »

Hallo,
Gast hat geschrieben: Bzw. erst dann wenn mit gotoEndOfUsedArea an das Ende gesprungen wird, wobei das ja dann anders als bei gotoEnd dann auch noch das ganze Tabellenblatt betrifft und nicht nur bis zur ersten leeren Spalte/Zeile.
Nein, es betrifft nicht das ganze Tabellenblatt, sondern den benutzen, also mit Daten gefüllten Bereich, eben UsedArea. Wenn bei Dir also .gotoEndOfUsedArea anders reagiert als .gotoEnd, dann steht bei Dir noch etwas außerhalb des eigentlichen zusammenhängend gefüllten Tabellenbereiches. Dieses Etwas muss kein Wert sein. es reicht, wenn z.B. ein Zellhintergrund oder ein Zellrahmen formatiert ist.
Gast hat geschrieben:wofür braucht man das ScCellCursorObj wenn man nicht an die Daten heran kommt die man auswählt?
Natürlich kommt man heran, siehe mein Beispiel.

Mit .gotoEnd() setzt Du aber den Cursor ja nur *auf* die letzte ohne Lücke gefüllte Zelle. Im Cursor steht dann also *eine* Zelle und an deren DatenArray kommst Du auch per oCursor.getDataArray(), aber eben nur an die *eine* Zelle.

Die Frage ist: Warum steht bei Dir in der Tabelle etwas *außerhalb* des eigentlichen zusammenhängend gefüllten Tabellenbereiches? So etwas sollte man möglichst vermeiden, also nicht mehrere Tabellen in einem Tabellenblatt erfassen. Dafür sind die einzelnen Tabellenblätter da. Auch "Nebenrechnungszellen" sollte man auf einen eigenen Tabellenblatt verwalten. Das erleichtert dann auch das Drucken.

Ansonsten hast Du ja jetzt eine Lösung. Mit .gotoEnd findest Du *die* letzte zusammenhängend gefüllte Zelle, ausgehend vom Cursor, und berechnest dann eben nach DPunch's Methode einen CellRange aus erster und gefundener letzter Zelle.

viele Grüße

Axel
Liegeflitzer
Beiträge: 6
Registriert: Do, 27.01.2011 21:23

Re: Daten aus einem Tabellenblatt Cursor lesen.

Beitrag von Liegeflitzer »

Hallo Axel,

den Unterschied zwischen beiden Formen der Auswahl (wenn man von einem ohne Lücken gefüllten Tabellenblatt ausgeht) habe ich immer noch nicht verstanden.
Was kann ich mit dem einen machen, was ich mit dem anderen nicht kann und umgekehrt.

Trotz allem vielen Dank an euch beide mein Problem ist gelöst.

Viele Grüße
Gregor

P.S. Wie kann man ein Thema als gelöst markieren?
Liegeflitzer
Beiträge: 6
Registriert: Do, 27.01.2011 21:23

Re: [GELÖST] Daten aus einem Tabellenblatt Cursor lesen.

Beitrag von Liegeflitzer »

Ich hatte nach einem Knöpfchen gesucht. Man ist ja Faul. :D
Antworten