Seite 1 von 1
[GELÖST] Daten aus einem Tabellenblatt Cursor lesen.
Verfasst: Do, 27.01.2011 22:37
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
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
Re: Daten aus einem Tabellenblatt Cursor lesen.
Verfasst: Fr, 28.01.2011 08:00
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.
Re: Daten aus einem Tabellenblatt Cursor lesen.
Verfasst: Fr, 28.01.2011 08:09
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
Re: Daten aus einem Tabellenblatt Cursor lesen.
Verfasst: Fr, 28.01.2011 20:01
von Liegeflitzer
Warum hat er mich den jetzt raus geschmissen?
Das war mein Beitrag da oben
Gregor
Re: Daten aus einem Tabellenblatt Cursor lesen.
Verfasst: Sa, 29.01.2011 07:41
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
Re: Daten aus einem Tabellenblatt Cursor lesen.
Verfasst: Di, 08.02.2011 21:00
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?
Re: [GELÖST] Daten aus einem Tabellenblatt Cursor lesen.
Verfasst: Do, 10.02.2011 20:31
von Liegeflitzer
Ich hatte nach einem Knöpfchen gesucht. Man ist ja Faul.
