Funktions Parameter als Object

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

Moderator: Moderatoren

Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Funtions Parameter als Object

Beitrag von Karolus »

Das würde ich mit einer Funktion erledigen, deren Aufruf aus Calc so ausehen würde:

Code: Alles auswählen

=LASTUSED("EX")
oder

Code: Alles auswählen

=LASTUSED(12)
dann kann deine UDF selbst entscheiden ob die letzte benutzte in der Zeile oder in der Spalte zurückgegeben wird.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Funtions Parameter als Object

Beitrag von clag »

Hallo Karolus,

deine Idee hatte ich auch schon angedacht durch Zahl und Text kann man schon gut Zeile Spalte unterscheiden
muß mann eben über ASC den TEXT in Index wandeln, aber ist auch nicht ziehbar.

meine Funktion soll "LUCI()" (LastUsedCellIn) heißen und dann wäre
=LUCI(SPALTE(E12)) oder
=LUCI(ZEILE(E12))

eine schöne eindeutige und immer gültige, ziehbare Adressierung gewesen, ohne irgend etwas anpassen/umrechnen zu müssen,
wenn es denn so funktioniert hätte das man aus dem einen Parameter zwei unterschiedliche Informationen entnehmen könnte.

hmmm ...
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Funtions Parameter als Object

Beitrag von balu »

Hallo clag!

Nachdem sich die Gelehrten (Stephan und Karolus) zu Worte gemeldet haben, möchte ich als Anfänger mich auch noch kurz einklinken.

Als erstes würde mich mal interessieren wie dein Code aussieht um die letzte benutzte Zelle zu ermitteln, egal ob für Zeile oder Spalte.

Und dann noch etwas grundsätzliches.
Wo willst Du deine eigene Funktion =LUCI() einsetzen? In der gleichen Zeile/Spalte wo die letzte benutzte Zelle gesucht werden soll, oder wie stellst Du dir das vor?

Und ferner, warumm soll die Funktion "ziehbar" sein?



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
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Funtions Parameter als Object

Beitrag von clag »

Hallo Balu,
balu hat geschrieben:Wo willst Du deine eigene Funktion =LUCI() einsetzen?
wenn möglich wie jede Funktion so flexible wie möglich also eben auch ziehen.

Ich selber hatte die Function mir für ein Makro erstellt.
Danach kam mir die Idee den Cosde auch in eine eine UDF zu packen und etwas universeller zu gestalten.
Die Parameter als SPALTE() und ZEILE() wären so schön einfach gewesen einschließlich Sprachumsetzung,
intern wäre es ja immer column und row.

=LUCI(SPALTE())

Code: Alles auswählen

Function LUCI(xCol)
iCol = xCol-1
	oDoc = ThisComponent
	oSheet = oDoc.Sheets(0)
	iCol = xCol-1
'	sTick = GetSystemTicks()
	aFunc = GetProcessServiceManager().createInstance("com.sun.star.sheet.FunctionAccess") 
	Xs = 1048576 : do : Xe = Xs : Xs = Xe/2
	NRange = oSheet.getCellRangeByPosition(iCol,Xs,iCol,Xe-1)
	Test1 = aFunc.callFunction("COUNTA", Array(NRange)) 
	if xs = 1 then Line = 1 
	if Test1 > 0 then : do
	if Xe-Xs < 4 then 
	for i=Xe to Xs step -1 
	Result = oSheet.getCellByPosition(iCol,i-1)
	if Result.Type <> 0 then Line = i : exit do 
	next : end if
	Xa = Xs : Xb = Xe : Xs = Xs + (Xe-Xs)/2
	NRange = oSheet.getCellRangeByPosition(iCol,Xs,iCol,Xe-1)
	Test2 = aFunc.callFunction("COUNTA", Array(NRange)) 
	if Test2 = 0 then Xb = Xs : Xs=xa : Xe=Xb : Test2 = 1
	loop until Test2 = 0 : end if : loop while isEmpty(Line)
	LUCI=Line
'	eTick = GetSystemTicks()
'	print line, "get in " & eTick-sTick 	
end Function
tschuldigung ist wieder in der von dir wenig geliebten zusammengeschobenen Version und auch z.Z. nur für Spalten
aber für Zeilen braucht man ja nur ein paar Variablen zu ändern.

edit:
hier der Code wieder auseinandergedröselt

Code: Alles auswählen

Function LUCI(xCol)
iCol = xCol-1
	oDoc = ThisComponent
	oSheet = oDoc.Sheets(0)
	iCol = xCol-1
'	sTick = GetSystemTicks()
	aFunc = GetProcessServiceManager().createInstance("com.sun.star.sheet.FunctionAccess") 
	Xs = 1048576 
	do 
	Xe = Xs 
	Xs = Xe/2
	NRange = oSheet.getCellRangeByPosition(iCol,Xs,iCol,Xe-1)
	Test1 = aFunc.callFunction("COUNTA", Array(NRange)) 
	if xs = 1 then Line = 1 
	if Test1 > 0 then 
		do
			if Xe-Xs < 4 then 
				for i=Xe to Xs step -1 
					Result = oSheet.getCellByPosition(iCol,i-1)
					if Result.Type <> 0 then 
						Line = i 
						exit do 
					end if
				next 
			end if
			Xa = Xs 
			Xb = Xe 
			Xs = Xs + (Xe-Xs)/2
			NRange = oSheet.getCellRangeByPosition(iCol,Xs,iCol,Xe-1)
			Test2 = aFunc.callFunction("COUNTA", Array(NRange)) 
			if Test2 = 0 then 
				Xb = Xs 
				Xs=xa 
				Xe=Xb 
				Test2 = 1
			end if
		loop until Test2 = 0 
	end if 
	loop while isEmpty(Line)
	LUCI=Line
'	eTick = GetSystemTicks()
'	print line, "get in " & eTick-sTick 	
end Function
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Funtions Parameter als Object

Beitrag von mikeleb »

Hallo clag,

hier mal ein Alternativ-Code:

Code: Alles auswählen

Function LUCI(xCol)
   oDoc = ThisComponent
   oSheet = oDoc.Sheets(0)
   ocol=osheet.columns(xCol-1)
   oleer=ocol.queryemptycells
   oleerletzte=oleer.getbyindex(oleer.getcount-1).getcellbyposition(0,0).celladdress.row
   LUCI=oleerletzte
End Function
Gruß,
mikeleb
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Funtions Parameter als Object

Beitrag von clag »

oh man, mikeleb

jetzt hast du aber mit 5 Zeile BasicCode mein gesamtes BasicSelbstvertrauen förmlich eliminiert.
Mit solchen schockierenden Mitteilungen wie dein alternative Code, musst du behutsamer an das Opfer herantreten.
Und ich hatte geglaubt ich hätte mir was tolles ausgedacht. :(

outsch ;)

Trotzdem besten Dank das du mir die Realität aufzeigst.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Funktions Parameter als Object

Beitrag von mikeleb »

Hallo clag,

ich bitte hiermit in aller Form und mit tiefstem Respekt um Entschuldigung für mein brutales Vorgehen. :)
Gruß,
mikeleb
Antworten