zellwert übernehmen (code kürzen)

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

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

zellwert übernehmen (code kürzen)

Beitrag von kannenklaus »

hallo zusammen,

mit folgendem code kann ich den zellwert von zelle c3 in a1 übertragen. dabei stell ich mir die frage, ob der nicht kürzer sein kann?

Code: Alles auswählen

Sub test
	Dim oDoc, oSheet, oCell1, oCell2 as Object
	Dim x as String
	oDoc=ThisComponent
	oSheet=oDoc.CurrentController.getActiveSheet
	oCell1=oSheet.getCellByPosition(0,0)
	oCell2=oSheet.getCellByPosition(2,2)
	oCell2.setString("Ewig singen die Wälder")
	'oCell1.setString("z")
	oCell1.setstring(oCell2.string)
end sub
freue mich auf eine antwort

danke

klaus
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Klaus,

na ja, für einen Zellwert zu übertragen....
Du kanst das natürlich auch in eine Zeile schreiben - nur, sehr viel kürzer wird es auch nicht, eher unübersichtlicher.

Es gibt noch andere Methoden, aber für eine Zelle wird der Code dadurch kaum kürzer :wink:

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas,
Es gibt noch andere Methoden
welche bitte schön?

grüße

klaus
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

welche bitte schön?
Du kannst den Textinhalt der Zelle der entsprechenden Eigenschaft direkt zuweisen und brauchst Dich nicht der Methode .setString bedienen, also:

Code: Alles auswählen

oCell1.string = oCell2.string
(was, unter Aufgabe der 2 unnötigen Leerzeichen, 4 Anschläge kürzer als Deine Variante ist)

Du kannst mit With arbeiten:

Code: Alles auswählen

With oSheet
	oCell1=.getCellByPosition(0,0) 
	oCell2=.getCellByPosition(2,2) 
End With
(was aber, auch unter Weglassung unnötiger Leerzeichen, 7 Anschläge mehr als Deine Variante beansprucht)
dabei stell ich mir die frage, ob der nicht kürzer sein kann?


da geht es mir wie Thomas, ich frage mich warum.
Es gab vor 20 Jahren mal gewisse Gründe, weil die Hardware schwach war, ich erinnere mich noch lebhaft damals immer eine kommentierte und eine unkommentierte Code-Variante geschrieben zu haben, weil die kommentierte zu lang war um in den Hauptspeicher zu 'passen', damals etwa 16 kB.
Heute ist das doch völlig überholt, es geht um leicht lesbaren und gut wartbaren Code.
Dein Code wäre natürlich entscheidend kürzer wenn Du ein-Buchstaben-Variablennamen verwenden würdest, aber das ist schon von der Tendenz der falsche Weg. Eigentlich sollte man sprechende Variablennamen verwenden, also beispielsweise für oCell1:
objZelleMitAusgangswert

Wichtiger wäre handwerklich sauber zu sein, denn ich kann mir nicht denken das du oDoc, oSheet und oCell1 als Typ Variant deklarieren wolltest, was Du hiermit aber tust:

Code: Alles auswählen

Dim oDoc, oSheet, oCell1, oCell2 as Object
richtig muß es heißen:

Code: Alles auswählen

Dim oDoc as Object, oSheet as Object, oCell1 as Object, oCell2 as Object



Gruß
Stephan
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stephan,
kann mir nicht denken das du oDoc, oSheet und oCell1 als Typ Variant deklarieren wolltest, was Du hiermit aber tust:
das war eine ausnahme; ansonsten deklariere ich immer brav mit as Object.

grüße

klaus
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

das war eine ausnahme; ansonsten deklariere ich immer brav mit as Object.
das war nicht der Grund meines Hinweises, ein:

Code: Alles auswählen

Dim oDoc, oSheet, oCell1, oCell2
hätte nicht meine Aufmerksamkeit erregt. Nur die Tatsache das Du oCell1 und oCell2 verschieden deklariert hast, war das was ist nicht verstand.


Gruß
Stephan
Antworten