Zelleninhalt in eine Liste Kopieren

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

Moderator: Moderatoren

Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zelleninhalt in eine Liste Kopieren

Beitrag von komma4 »

Schleifen?


Folgender Code kopiert Werte (nummerische Eingaben). Handelt es sich um Zeichen(-ketten), dann ist im Code get-/setValue durch get-/setString zu ersetzen.

Einschränkung: auf der Seite gibt es nur die Eingabe in A1 und die Fortschreibung in B.
Sind mehr Daten (Spalten) vorhanden, muss ich noch ein bissel basteln.

Das klappt, bis die letzte Zeile gefüllt ist.


Tabellennamen anpassen!

Code: Alles auswählen

Sub de39960

oDok = ThisComponent
oBlatt = oDok.Sheets.getByName( "Tabelle7" )
oCursor = oBlatt.createCursor()
oCursor.gotoEndofUsedArea( TRUE )
aAddresse = oCursor.getRangeAddress()

oBlatt.getCellByPosition( 1 , aAddresse.EndRow + 1 ).setValue( oBlatt.getCellByPosition( 0, 0 ).getValue() )

End Sub

Hilft Dir das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Zelleninhalt in eine Liste Kopieren

Beitrag von DPunch »

Aloha
komma4 hat geschrieben:Folgender Code kopiert Werte (nummerische Eingaben). Handelt es sich um Zeichen(-ketten), dann ist im Code get-/setValue durch get-/setString zu ersetzen.
Die Unterscheidung sollte man mit einem DataArray doch umgehen können, oder?

Code: Alles auswählen

	oDok = ThisComponent
	oBlatt = oDok.Sheets.getByName( "Tabelle7" )
	oCursor = oBlatt.createCursor()
	oCursor.gotoEndofUsedArea( TRUE )
	aAddresse = oCursor.getRangeAddress()
	nLetzteZeile = aAddresse.EndRow
	aQuellData = oBlatt.getCellByPosition( 0, 0 ).DataArray
	
	If Len(oBlatt.getCellByPosition(1,nLetzteZeile).String) = 0 Then
		For i = 0 To nLetzteZeile
			If Len(oBlatt.getCellByPosition( 1 , i ).String) = 0 Then
				oBlatt.getCellByPosition( 1 , i ).setDataArray(aQuellData)
				Exit Sub
			End If
		Next i
	Else
		oBlatt.getCellByPosition( 1 , nLetzteZeile+1 ).setDataArray(aQuellData)
	End If
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zelleninhalt in eine Liste Kopieren

Beitrag von komma4 »

DPunch hat geschrieben:Die Unterscheidung sollte man mit einem DataArray doch umgehen können, oder?
Ja, guter Vorschlag (wollte mir es halt einfach machen 8) )


Habe jetzt auch nochmal nach dem Cursor für einen Bereich geschaut, damit kann man die SCHLEIFE umgehen.


Variante2:

Code: Alles auswählen

Sub de39960_2

oDok = ThisComponent
oBlatt = oDok.Sheets.getByName( "Tabelle7" )
letzteZeile = oBlatt.getRows().getCount()

oBereich = oBlatt.getCellRangeByName( "B1:B" & letzteZeile )

oCursor = oBlatt.createCursorByRange( oBereich )
oCursor.gotoEndofUsedArea( TRUE )

If oCursor.Rows.Count = letzteZeile Then
   Print "Spalte ist voll - kann nicht kopieren!"
Else
   aQuellData = oBlatt.getCellByPosition( 0, 0 ).getDataArray()
   oBlatt.getCellByPosition( 1 , oCursor.Rows.Count ).setDataArray( aQuellData ) 
End If

End Sub


Schlagwörter für die Suchfuktion:
"letzte Zelle", "letzte Zeile", "gefüllt im Bereich"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zelleninhalt in eine Liste Kopieren

Beitrag von Stephan »

Die Unterscheidung sollte man mit einem DataArray doch umgehen können, oder?
Funktioniert, ist aber für einzelne Zellen, unter benannten Randbedingungen, eher nicht nötig, sondern es sollte reichen statt .Value oder .String einfach .FormulaLocal zu nutzen (geht natürlich nur unter den genannten Randbedingungen, also das die Zellen keine Formeln enthalten).


Gruß
Stephan
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Zelleninhalt in eine Liste Kopieren

Beitrag von DPunch »

Aloha
Stephan hat geschrieben:sondern es sollte reichen statt .Value oder .String einfach .FormulaLocal zu nutzen
Hast absolut Recht, unter diesen simplen Bedingungen ist das die beste Lösung - vor allem, da man mit FormulaLocal im Gegensatz zum DataArray auch z.B. Datumsangaben "korrekt" kopiert (DataArray nimmt dabei den internen Wert des Datums).
Antworten