🙏 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!🍀

❤️ DANKE >> << DANKE ❤️

>> 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?

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Lupo
Beiträge: 279
Registriert: Do 11. Okt 2012, 14:22

=VERKETTEN() immer noch nicht für Bereiche?

Beitrag von Lupo » So 21. Okt 2012, 22:44

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]
Zuletzt geändert von Lupo am So 21. Okt 2012, 22:57, insgesamt 1-mal geändert.
MfG Lupo - xxcl.de Win10ProLO6062

swolf
* LO-Experte *
Beiträge: 1143
Registriert: Di 14. Feb 2012, 16:56

Re: =VERKETTEN() immer noch nicht für Bereiche?

Beitrag von swolf » So 21. Okt 2012, 22:52

Lupo hat geschrieben: Wie sähe entsprechend die sehr kurze VBA-UDF-Lösung http://sulprobil.com/html/sbcat.html in LO-Basic aus?
Die Frage gehört in das Unterforum 'LibreOffice Programmierung'.
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

Lupo
Beiträge: 279
Registriert: Do 11. Okt 2012, 14:22

Re: =VERKETTEN() immer noch nicht für Bereiche?

Beitrag von Lupo » So 21. Okt 2012, 23:48

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]
MfG Lupo - xxcl.de Win10ProLO6062

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: =VERKETTEN() immer noch nicht für Bereiche?

Beitrag von karolus » Mo 22. Okt 2012, 08:15

Hallo
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
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
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Lupo
Beiträge: 279
Registriert: Do 11. Okt 2012, 14:22

Re: =VERKETTEN() immer noch nicht für Bereiche?

Beitrag von Lupo » Mo 22. Okt 2012, 09:07

@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?
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" )
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?
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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: =VERKETTEN() immer noch nicht für Bereiche?

Beitrag von karolus » Mo 22. Okt 2012, 10:35

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
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Lupo
Beiträge: 279
Registriert: Do 11. Okt 2012, 14:22

Re: =VERKETTEN() immer noch nicht für Bereiche?

Beitrag von Lupo » Mo 22. Okt 2012, 11:27

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).

Code: Alles auswählen

function multikette( abereich as variant , trennzeichen as string ) '---Achtung: Funktion geht so nicht!---
    multikette = join(abereich, trennzeichen)
End function
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:

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
Wenn man etwas "fair" ist, ist

Code: Alles auswählen

return joinstring.join("%s" % elem for elem in flat(datarange) if elem)
halt auch recht komplex.

In Basic ist es dagegen unfein ("Spaghetticode"),

Code: Alles auswählen

for each eintrag in abereich: astring(i) = eintrag: i = i + 1: next
zu schreiben. Dabei ist der Inhalt auch nicht komplexer.
MfG Lupo - xxcl.de Win10ProLO6062

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: =VERKETTEN() immer noch nicht für Bereiche?

Beitrag von karolus » Mo 22. Okt 2012, 13:02

Hallo
...wobei auch er das Join() statt dessen hätte verwenden können:
Hätte er nicht, ohne dabei auf die 'if not....' zeile zu verzichten.

Karolus
LO7.4.7.5 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.



Antworten