Python Zeilenumbruch mehrzeiliger Text in Planlegende


Liebe Forengemeinde,

nach unserm Wechsel zur aktuellen Allplanversion 2023 funktionieren unsere Plan-Legenden mit Excel-Formeln leider nicht mehr. Daher habe ich mich mal wieder dem Thema Zeilenumbruch in der Planlegende gewidmet. Hier gibt es nun die Möglichkeit zur Nutzung von Python-Scripts. Da bei Planlegenden die vbs-Formeln zu mehrzeiligen Text von Meister Jörg bei mir leider nicht funktionieren, habe ich einen neuen Lösungsansatz.

Mit zwei Python-Funktionen wollte ich zunächst einen String nach einer Anzahl von Zeichen auf Leerzeichen zu untersuchen, das letzte Leerzeichen zurückzugeben und durch ein Sonderzeichen ersetzten (Funktion: zeilenumbruch(@xxx@;(Zeichenanzahl Untersuchung Leerzeichen))). Mit der Zweiten Formel teil_tz von f_hoeser (Link) möchte ich nun den Teilstring 1,2,3 in verschiedenen Zellen ausgeben. Also habe ich eine Zelle definiert die mit "p:zeilenumbruch" die Zeichen am gewünschten Umbruch ersetzt "*" und weitere Zellen die die Teilstrings auslesen. Allerdings funktioniert das Ganze noch nicht sauber.

Folgende Probleme bestehen:

- Formel p:zeichenumbruch gibt mir nur den ersten Teilstring aus (siehe Bild)
- Formel p:teil_tz gibt alles nur in Großformat aus und durch den Fehler in p:zeilenzmbruch auch nur den ersten Teilstring

Eine bessere Lösung währe eine kombinierte Python-Formel ohne den Umweg über zwei Zellen - das scheitert allerdings an meinen Python Kenntnissen. Habt Ihr eine Idee? Anbei die beiden Python Scripts:

def zeilenumbruch(s, l):
l = int(l)
aus = ""
while len(s) > l:
p = l-1
while p > 0 and s[p]not in " -":
p -= 1
if p == 0:
p = l
aus += s[:p+1] + "*"
s = s[p+1:]
return aus+s

def teil_tz(a,b,c):
c = int(c)
count = a.count(b) + 1
if c > count or c <= 0:
string = " "
else:
substrings = a.split(b)
string = substrings[c - 1]
return string.upper()

Liebe Grüße Micha

Anhänge (3)

Typ: image/png
58-mal heruntergeladen
Größe: 37,79 KiB
Typ: image/png
38-mal heruntergeladen
Größe: 40,56 KiB
Typ: application/x-rar
315-mal heruntergeladen
Größe: 390,00 B

Bei dieser Formel kann man den Separator für den Zeilenumbruch angeben

def multiline(txt,sep):
lines = txt.split(sep)
txt=""
for i in range(0, len(lines)):
txt += lines[i]txt += "\r"
return txt

Formel:
""+p:multiline(@473@;"/")

Ansonsten hilft Suche nach "Zeilenumbruch".
Damit findet man z.B diese Lösung

Hey Jörg,

vielen Dank für die schnelle Rückmeldung. Kern meines Problems ist, dass ich den Zeilenumbruch in einer Planlegende benötige. In deinem verlinkten Beitrag habe ich vor jetzt fast schon 3 Jahren abschließend festgestellt, dass der vorgeschlagene vbs-Weg nur für Beschriftungsbilder funktioniert. Mehrzeiliger Textblock mit Zeilenumbruch ist als Planlegende nicht möglich. Deshalb bin ich auf der suche nach einer Alternative.

Meiner Meinung nach muss für jeden Teilstring eine separate Zelle für die Ausgabe existieren. jvelletti hatte für vbs damals einen passenden Ansatz mit getTextPart(@Attribut@;Zeile;Länge max. Zeichen). Leider habe ich das für Allplan nie zum laufen bekommen. Hast du eine Idee?


https://campus.allplan.com/ verwendet Cookies  -  Mehr Informationen

Akzeptieren