🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
=VERKETTEN() immer noch nicht für Bereiche?
=VERKETTEN() immer noch nicht für Bereiche?
Sowohl in meinem alten Excel als anscheinend auch beim aktuellen LO gibt es immer noch kein Bereichsverketten:
Stark
Schnell
Schwarz
sollte (auf sicher nicht nur meiner Wunschliste) durch =VERKETTEN(A1:A3;". ";WAHR;1) werden zu:
Stark. Schnell. Schwarz.
(optional: ". " gibt einen Trenner an. Default: kein Trenner)
(optional: WAHR gäbe an, nur nichtleere Zellen zu verketten. Default: FALSCH)
(optional: 1 gäbe dann an, dass der Trenner ". " auch am Schluss verwendet wird (2: am Anfang/3: am Anfang und am Schluss). Default: 0)
Oder habe ich es nur nicht gefunden?
Wie sähe entsprechend die sehr kurze VBA-UDF-Lösung http://sulprobil.com/html/sbcat.html in LO-Basic aus?
[Edit]Antwort: http://de.openoffice.info/viewtopic.php ... 68#p124973[/Edit]
Stark
Schnell
Schwarz
sollte (auf sicher nicht nur meiner Wunschliste) durch =VERKETTEN(A1:A3;". ";WAHR;1) werden zu:
Stark. Schnell. Schwarz.
(optional: ". " gibt einen Trenner an. Default: kein Trenner)
(optional: WAHR gäbe an, nur nichtleere Zellen zu verketten. Default: FALSCH)
(optional: 1 gäbe dann an, dass der Trenner ". " auch am Schluss verwendet wird (2: am Anfang/3: am Anfang und am Schluss). Default: 0)
Oder habe ich es nur nicht gefunden?
Wie sähe entsprechend die sehr kurze VBA-UDF-Lösung http://sulprobil.com/html/sbcat.html in LO-Basic aus?
[Edit]Antwort: http://de.openoffice.info/viewtopic.php ... 68#p124973[/Edit]
Zuletzt geändert von Lupo am So 21. Okt 2012, 22:57, insgesamt 1-mal geändert.
MfG Lupo - xxcl.de Win10ProLO6062
Re: =VERKETTEN() immer noch nicht für Bereiche?
Die Frage gehört in das Unterforum 'LibreOffice Programmierung'.Lupo hat geschrieben: Wie sähe entsprechend die sehr kurze VBA-UDF-Lösung http://sulprobil.com/html/sbcat.html in LO-Basic aus?
http://www.libreoffice-forum.de/viewforum.php?f=12
Und Informationen zur StarBasic Programmierung findest du im openoffice.info-forum
http://de.openoffice.info/viewtopic.php ... c8ad8187fb
Re: =VERKETTEN() immer noch nicht für Bereiche?
Das war eine übergreifende Frage 
"Gibt es VERKETTEN() wie gewünscht? (statt nur des unsinnigen Ersatzes für ...&...&...)"
Erst danach kam dann die Frage nach Basic. Die hatte ich dann aber schon selbst beantwortet. Also verbleibt nur erstere.
[Edit]Asche auf mein Haupt: Das hatte sich überschnitten.[/Edit]

"Gibt es VERKETTEN() wie gewünscht? (statt nur des unsinnigen Ersatzes für ...&...&...)"
Erst danach kam dann die Frage nach Basic. Die hatte ich dann aber schon selbst beantwortet. Also verbleibt nur erstere.
[Edit]Asche auf mein Haupt: Das hatte sich überschnitten.[/Edit]
MfG Lupo - xxcl.de Win10ProLO6062
Re: =VERKETTEN() immer noch nicht für Bereiche?
Hallo
Aus meiner Python-'krabbelkiste' :
Lediglich zur "Anbindung" als Calcfunktion wird dazu so etwas wie hier beschrieben benötigt.
( Da in diesem Fall kein Array zurückgegeben wird ist das auch relativ einfach als Addin-funktion umsetzbar ohne die unsinnige Basic-"Schnittstelle" )
Karolus
Aus meiner Python-'krabbelkiste' :
Code: Alles auswählen
...
from itertools.chain import from_iterable as flat
...
def sjoin( datarange , joinstring = "" ):
"""
Calcfunktion zum verketten ganzer Zellbereiche,
mit Bereichsadressangabe und mit der optionalen
Möglichkeit eines Verbindungszeichens oder -Texts
"""
if isinstance (datarange, tuple): # cellranges always *nested* tuples
return joinstring.join("%s" % elem for elem in flat(datarange) if elem)
else :
return datarange # a single cellvalue
( Da in diesem Fall kein Array zurückgegeben wird ist das auch relativ einfach als Addin-funktion umsetzbar ohne die unsinnige Basic-"Schnittstelle" )
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: =VERKETTEN() immer noch nicht für Bereiche?
@Karolus: Vielen Dank für den Einblick in die Krabbelkiste!
Als Höchstens-Nur-Etwas-Mit-Basic-Vertrauter-Nichtinformatiker frage/vermute ich nun mal folgendes:
1- Python läuft nur mit Java, oder? Trifft immer noch zu (LO 3.6.2), dass es eher Java 6 als Java 7 sein muss?
2- Unter Extras-Optionen kann ich bei Python nichts einfügen - liegt das an einem ausgewählten Java 7?
3- Das mit dem Wrapper habe ich schon mal gehört (und damals mit kleinem Testerfolg) für kompilierte Basic-Funktionen. Für den Laien: Was bedeuten Deine beiden Sätze?
3b- Ein zurückgegebenes Array benötigt noch "etwas darüber hinaus", richtig? Was genau?
4- Vielleicht kannst Du noch kurz erklären, wie Du das mit der "unsinnigen Basic-Schnittstelle" meinst? Was ist daran "unsinnig", wann kann darauf verzichtet werden?
Vielen Dank für ein paar Antworten! An einem Beispiel hätte man dann als Laie eine zu einer konkreten Forumsfrage funktionierende Python-Funktion, und zumindest eine Ahnung davon, was man alles braucht, damit sie auch in Calc als UDF läuft.
Als Höchstens-Nur-Etwas-Mit-Basic-Vertrauter-Nichtinformatiker frage/vermute ich nun mal folgendes:
1- Python läuft nur mit Java, oder? Trifft immer noch zu (LO 3.6.2), dass es eher Java 6 als Java 7 sein muss?
2- Unter Extras-Optionen kann ich bei Python nichts einfügen - liegt das an einem ausgewählten Java 7?
3- Das mit dem Wrapper habe ich schon mal gehört (und damals mit kleinem Testerfolg) für kompilierte Basic-Funktionen. Für den Laien: Was bedeuten Deine beiden Sätze?
3a- Da es hier ja um eine Calc-UDF (und nicht um eine Weiterverwendung innerhalb von anderen Funktionen, sei es Python oder etwas anderes, richtig?) geht, brauche ich wohl "so etwas", oder? Wie sähe es hier denn genau aus?Lediglich zur "Anbindung" als Calcfunktion wird dazu so etwas wie hier beschrieben benötigt.
( Da in diesem Fall kein Array zurückgegeben wird ist das auch relativ einfach als Addin-funktion umsetzbar ohne die unsinnige Basic-"Schnittstelle" )
3b- Ein zurückgegebenes Array benötigt noch "etwas darüber hinaus", richtig? Was genau?
4- Vielleicht kannst Du noch kurz erklären, wie Du das mit der "unsinnigen Basic-Schnittstelle" meinst? Was ist daran "unsinnig", wann kann darauf verzichtet werden?
Vielen Dank für ein paar Antworten! An einem Beispiel hätte man dann als Laie eine zu einer konkreten Forumsfrage funktionierende Python-Funktion, und zumindest eine Ahnung davon, was man alles braucht, damit sie auch in Calc als UDF läuft.
MfG Lupo - xxcl.de Win10ProLO6062
Re: =VERKETTEN() immer noch nicht für Bereiche?
Hallo
zu 1):
Python 'braucht' nur seinen Python-interpreter und seine eigenen Module - nix Java !
Beides wird mit Lo mitgeliefert ( sofern du das bei einer Benutzerdefinierten Installation nicht abwählst )
zu 2):
LO hat keine eingebaute IDE für Python, du musst schon mit einem externen Editor arbeiten und deine Scripte im Pfad:
~$USERCONFIG***/3/user/Scripts/python/... ablegen.
zu 3):
Ohne weiteres Zutun sind aus Calc heraus nur (Basic)-UDF's ansprechbar die in einer der Standard-bibliotheken abgelegt sind
( also enweder ~MeineMakros/Standard/Modulname/.. oder ~Dokumentname.ods/Standard/Modulename/... )
zu 3b):
das wird ausführlich in dem verlinktem Thread beschrieben.
zu 4):
Unsinnig ist die Tatsache, daß man im Prinzip für eine simple Funktion die mit 3 Zeilen Python abgehandelt wird, im einfachsten Fall rund 7 Zeilen in Basic schreiben muss.
Ohne Basicschnittstelle läufts auf eine Calc-Addin heraus.http://www.biochemfusion.com/doc/Calc_addin_howto.html
Eine etwas umfangreicheres in Python geschriebenes Addin ist: http://extensions.services.openoffice.o ... numbertext
***der Basispfad findet sich unter →Extras→Optionen→LO→Pfade
Karolus
zu 1):
Python 'braucht' nur seinen Python-interpreter und seine eigenen Module - nix Java !
Beides wird mit Lo mitgeliefert ( sofern du das bei einer Benutzerdefinierten Installation nicht abwählst )
zu 2):
LO hat keine eingebaute IDE für Python, du musst schon mit einem externen Editor arbeiten und deine Scripte im Pfad:
~$USERCONFIG***/3/user/Scripts/python/... ablegen.
zu 3):
Ohne weiteres Zutun sind aus Calc heraus nur (Basic)-UDF's ansprechbar die in einer der Standard-bibliotheken abgelegt sind
( also enweder ~MeineMakros/Standard/Modulname/.. oder ~Dokumentname.ods/Standard/Modulename/... )
zu 3b):
das wird ausführlich in dem verlinktem Thread beschrieben.
zu 4):
Unsinnig ist die Tatsache, daß man im Prinzip für eine simple Funktion die mit 3 Zeilen Python abgehandelt wird, im einfachsten Fall rund 7 Zeilen in Basic schreiben muss.
Ohne Basicschnittstelle läufts auf eine Calc-Addin heraus.http://www.biochemfusion.com/doc/Calc_addin_howto.html
Eine etwas umfangreicheres in Python geschriebenes Addin ist: http://extensions.services.openoffice.o ... numbertext
***der Basispfad findet sich unter →Extras→Optionen→LO→Pfade
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: =VERKETTEN() immer noch nicht für Bereiche?
Aha.
1) hatte ich wohl missverstanden, weil beim Öffnen von Extr/Opt/Python (anders als bei Extr/Opt/Basic) LO mir ein defektes Java zurückmeldete. Dann setzte ich irgendwo einen Haken bei Java, und die Meldung war weg.
2)+3) ok. Das krieg ich mal später. Bin schon froh, wenn ich Funktionen in Basic hinbekomme.
4) ist es nicht so, das Python hier einfach den Range verketten kann, wo Basic scheitert, weil es den Range vorher in ein 1-dim Array wandeln muss? Doch nur deshalb ist es so viel kürzer (wenn man mal von "For-Next" absieht).
wäre ja möglich, wenn abereich sequentiell in Basic ausgelesen werden könnte, statt erst eine neue Arrayvariable zu füllen.
Bernd Plumhoff nimmt in http://sulprobil.com/assets/images/2010 ... t_Code.png (warum er den Code nicht kopierbar macht, weiß ich nicht) "For Each" und verkürzt den Code dadurch auch. Allerdings ist vermutlich das mehrfache Anhängen an länger werdende Strings viel langsamer als Dein Join() (muss ich mal gegeneinander testen), wobei auch er das Join() statt dessen hätte verwenden können:
Wenn man etwas "fair" ist, isthalt auch recht komplex.
In Basic ist es dagegen unfein ("Spaghetticode"), zu schreiben. Dabei ist der Inhalt auch nicht komplexer.
1) hatte ich wohl missverstanden, weil beim Öffnen von Extr/Opt/Python (anders als bei Extr/Opt/Basic) LO mir ein defektes Java zurückmeldete. Dann setzte ich irgendwo einen Haken bei Java, und die Meldung war weg.
2)+3) ok. Das krieg ich mal später. Bin schon froh, wenn ich Funktionen in Basic hinbekomme.
4) ist es nicht so, das Python hier einfach den Range verketten kann, wo Basic scheitert, weil es den Range vorher in ein 1-dim Array wandeln muss? Doch nur deshalb ist es so viel kürzer (wenn man mal von "For-Next" absieht).
Code: Alles auswählen
function multikette( abereich as variant , trennzeichen as string ) '---Achtung: Funktion geht so nicht!---
multikette = join(abereich, trennzeichen)
End function
Bernd Plumhoff nimmt in http://sulprobil.com/assets/images/2010 ... t_Code.png (warum er den Code nicht kopierbar macht, weiß ich nicht) "For Each" und verkürzt den Code dadurch auch. Allerdings ist vermutlich das mehrfache Anhängen an länger werdende Strings viel langsamer als Dein Join() (muss ich mal gegeneinander testen), wobei auch er das Join() statt dessen hätte verwenden können:
Code: Alles auswählen
function multikette( abereich as variant , trennzeichen as string ) '---funktioniert!---
dim astring( ubound(abereich,1)* ubound(abereich,2) - 1 )
for each eintrag in abereich
astring(i) = eintrag
i = i + 1
next
multikette = join(astring(),trennzeichen)
end function
Code: Alles auswählen
return joinstring.join("%s" % elem for elem in flat(datarange) if elem)
In Basic ist es dagegen unfein ("Spaghetticode"),
Code: Alles auswählen
for each eintrag in abereich: astring(i) = eintrag: i = i + 1: next
MfG Lupo - xxcl.de Win10ProLO6062
Re: =VERKETTEN() immer noch nicht für Bereiche?
Hallo
Karolus
Hätte er nicht, ohne dabei auf die 'if not....' zeile zu verzichten....wobei auch er das Join() statt dessen hätte verwenden können:
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.