eigene Funktion keine Aktualisierung

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

eigene Funktion keine Aktualisierung

Beitrag von clag »

hallo Kenner und und Könner

versuche mich gerade daran eigenen Funktionen zu erstellen.
Dabei ist mir aufgefallen, das die eigene Funktionen nicht automatisch aktualisiert werden
auch nicht bei F9 nur wen der Zelleninhalt echt editiert wurde wird nach dem Enter die Funktion ausgeführt,
danach nicht mehr, selbst wenn man Zellinhalte ändert auf die sich die Funktion bezieht.

Das kann doch so nicht gewollt sein oder?
Was klemmt da bzw was könnte die Ursache für das Verhalten sein?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
CalcWeiss
**
Beiträge: 32
Registriert: Sa, 17.08.2013 13:26

Re: eigene Funktion keine Aktualisierung

Beitrag von CalcWeiss »

Schau mal im angehängten Beispiel. In Zelle B2 steht eine eigene Funktion, die sich auf A2 bezieht. Wenn ich in A2 etwas eintrage, erscheint eine Kopie in B2.
Wichtig: Die Funktion muss unter Standard stehen und Makros müssen erlaubt sein. Außerdem darf die Funktion keinen Fehler haben. Wenn es noch Klärungsbedarf gibt, lad mal einen Code-Snippet hoch.
Dateianhänge
Meins.ods
Beispiel eigene Funktion
(8.8 KiB) 105-mal heruntergeladen
Win-XP32, LO4.1.1.2 (en)
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: eigene Funktion keine Aktualisierung

Beitrag von Karolus »

Hallo
@clag
Postest du deine eigene Funktion ??

Karolus
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: eigene Funktion keine Aktualisierung

Beitrag von clag »

Hallo CalcWeis
erstmal danke,
deine BspFunktion funktioniert und wird aktualisiert

Hi Karo

bin grade dabei :)

Code: Alles auswählen

FUNCTION LISTEX(myra)
	oSheet = Thiscomponent.CurrentController.ActiveSheet
    oRange = oSheet.getcellrangebyname (myra)
    for i = 0 to ubound(orange.data(0))
        for k = 0 to ubound (orange.data)
            oCell = oRange.getcellbyposition(i,k)
            liste = liste & ";" & oCell.string
        next k
    next i
	LISTEX=liste
End FUNCTION
so steht die formel in der Zelle
=LISTEX("A1:B10")

gibt auch beim ersten Enter das richtige Ergebnis aus, eine Liste aller Zellinhalte aus dem gewählten Bereich mit ";" getrennt
wird dannach aber nicht mehr aktualisiert

Gespeichert wird in "Meine Makros & Dialoge_Standard_Funktionen"
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: eigene Funktion keine Aktualisierung

Beitrag von Karolus »

Hallo
Calc "sieht" da nur den Text 'A1:B10' als Argument, zum Zellbereichsobject wird das erst in der Funktion aufgelöst.
Daher musst du per strg+shft+F9 aktualisieren.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: eigene Funktion keine Aktualisierung

Beitrag von Stephan »

ein Text ("A1:B10") ist kein Zellbereich(sobjekt) (A1:B10). Wenn die Funktion sich selbst aktualisieren soll darfst Du generell keinen Text übergeben und müßtest im Falle der benutzerdefinierten Funktion diese entsprechend umschreiben.
Ein Beipiel das das für Zahlen demonstriert findet sich in:
http://www.calc-info.de/files/Calc_StarBasic.pdf

Kapitel 10.2, Function summenTest()


Gruß
Stephan
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eigene Funktion keine Aktualisierung

Beitrag von clag »

ah oh

hm
kann man das besser gestallten?
ich würde mir schon wünschen, das "meine Funktion" genau wie eine "Calc Funktion" immer bei einer Änderung in der Tabelle aktualisiert wird.
Wenn ich es ohne die "" also =LISTEX(A1:B10) versucht habe was mir viel besser gefällt, hat Basic immer gemeckert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: eigene Funktion keine Aktualisierung

Beitrag von Stephan »

kann man das besser gestallten?
Ja, und ich hatte Dir ein Beispiel bereits auf dem Silbertablet serviert.


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

Re: eigene Funktion keine Aktualisierung

Beitrag von Karolus »

Hallo

Aus der alten Bastelkiste:

Code: Alles auswählen

function multikette( abereich as variant , trennzeichen as string )

dim astring( ubound(abereich,1)* ubound(abereich,2) - 1 )
 
for i = 1 to ubound(abereich,1)
	for si = 1 to ubound(abereich,2)			
      	astring(iii) = abereich(i,si)
      	iii = iii +1
	next si
next i


multikette = join(astring(),trennzeichen)

end function
Karolus
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: eigene Funktion keine Aktualisierung

Beitrag von clag »

Hallo Stephan

sorry, ich hatte deine Antwort noch garnicht registriert, war nicht auf so hohe Antwortfrequenz eingestellt :D
werd jetzt aber gleich mal schauen ob ich das umsetzen kann was der Link aufzeigt :)
Danke


ha und für Karolus natürlich auch der zwischendurch aktiv war

also ALLEN gilt mein DANK
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
CalcWeiss
**
Beiträge: 32
Registriert: Sa, 17.08.2013 13:26

Re: eigene Funktion keine Aktualisierung

Beitrag von CalcWeiss »

Das Hauptproblem bei eigenen Funktionen ist meines Erachtens, dass keine Zellobjekte sondern nur Zellinhalte an die Funktion übergeben werden. Man schlägt sich also mit einem Wert oder einem Array herum und hat keine Möglichkeit, auf die Adresse der Zelle zurück zugreifen. Bei =myFunc(A1) und =myFunc(B2) sieht die Funktion also keinen Unterschied, sofern sich der Zellinhalt nicht unterscheidet.

Eine Option wäre möglicherweise die Funktion =myFunc(A1, "A1"), bei der der erste Parameter für eine Aktualisierung sorgt, der zweite lediglich als Referenz dient. Aber falls sich am Sheet etwas verändert, z.B. eine neue Zeile ganz oben eingefügt wird, dann ändert sich die Funktion automatisch in
=myFunc(B1, "A1") und erfüllt nicht mehr ihren Zweck. Besser ist es, den ganzen Bereich abzudecken, der in der Funktion ausgewertet werden soll, denn dann bekommt man ein Array über alle Werte und braucht sich nicht mehr mit Zellobjekten herum zu schlagen.
Win-XP32, LO4.1.1.2 (en)
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: eigene Funktion keine Aktualisierung

Beitrag von Karolus »

Hallo
Das Hauptproblem bei eigenen Funktionen ist meines Erachtens, dass keine Zellobjekte sondern nur Zellinhalte an die Funktion übergeben werden
Dafür müstest du deine Funktion als AddIn in eine xyz.oxt stecken und in der Schnittstellen-definition ( im ..idl File ) das Argument als ::com::sun::star::table::XCellRange festlegen. siehe hier

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten