[Otázka] Beschriftungsbild mit Zeilenumbruch


Hallo Community,

das ist meine erste Anfrage.
Ich hoffe ihr könnt mir weiterhelfen.

ich habe folgendes Problem, ich muss in Allplan ein Attribut auswerten und in einem Text wiedergeben. Dies kann ich mit Excel-Formeln machen. Allerdings können in Allplan nur 254 Zeichen eingegeben werden. meine entwickelte Formel hat 314 Zeichen und muss somit verkürzt werden.

Das auszulesende Attribut heißt Bauvorhaben = @460@ in meiner Formel ist es A1.
In diesen Attribut steht ein Text, dieser Text muss auf 5 Zeilen mit jeweils maximal 25 Zeichen aufgeteilt werden. In Allplan gibt es leider keine Möglichkeit auf Zwischenschritte zurückzugreifen, daher muss alles in eine Formel. Des Weiteren soll der Zeilenumbruch nicht mitten im Wort geschehen, sondern nach einem Lehrzeichen.

vielen Dank für eure Hilfe.

Mfg Christoph

Beispieltext Für das Attribut (A1):
Max Mustermann GmbH und Co KG Mustermannstadt vertreten durch Herrn Oberbürgermeister Max Musterman.

Formel für Zeile 1:

=WENN(LÄNGE(A1)> WENN(LÄNGE(A1)>25;FINDEN("#";WECHSELN(LINKS(A1;25);" ";"#";LÄNGE(LINKS(A1;25)) -LÄNGE(WECHSELN(LINKS(A1;25);" ";""))));"100");LINKS(A1; WENN(LÄNGE(A1)>25;FINDEN("#"; WECHSELN(LINKS(A1;25);" ";"#";LÄNGE(LINKS(A1;25))-LÄNGE(WECHSELN(LINKS(A1;25);" ";""))));"100")); A1)

alle weiteren Zeilen müssen entsprechendeine neue angepasste Formel erhalten.

Ergebnis:
Max Mustermann GmbH und
Co KG Mustermannstadt
vertreten durch Herrn
Oberbügermeister Max
Mustermann

Show most helpful answer Hide most helpful answer

..es gibt eine Datei "function.vbs" im Ordner STD.
Dort könnte man solche "Formeln" als Visual-Basic-Funktion ablegen.
Suche mal nach "function" im Forum...

21 - 27 (27)

Benutze auch 2018.
Schriftart ist auch Arial.

wenn ich vbLf eingebe ändert sich nichts. da sind immer noch Kästchen wo getrennt werden soll und alles in einer Zeile

wenn ich "\r\n" verwende steht an der der Stelle wo vorher das Kästchen war jetzt \r\n

das vorhandene Beispiel in der Functions.vbs war auch mit vbCR ...

Das letzte was mir einfällt wäre das mit vbCR + vbLF zu versuchen ..

Für die das "Bömische Dörfer" sind:

vbCR =: vb = visualBasic Konstante | CR = Carrige Return (in der Linux / webwelt auch \r für Return )
vbLF =: vb = visualBasic Konstante | LF = Line Feed (in der Linux / webwelt auch \n für New Line )

\r\n wäre somit return und neue Zeile .. So wie früher bei der Schreibmaschine: "Warenrücklauf" und dann eis nach unten ..

und jedes Betriebssystem macht da seine Unterschiede .. Da allplan urspünglich für Unix entwicklet worden war, sind manchmal noch die Zeilenumbrüche noch im Unix style .. Windows braucht eher \r\n bzw. vbCR + vbLF

darum würde ich mal vbCR + vbLF versuchen
Sont muss ich wirklich mal Fritz Sander fragen.

Function block(liste)
       blanc = InStr(1,liste," ")
	   
	   If blanc > 1 Then
          block = Mid(liste,1,blanc) + vbCr + Mid(liste,blanc+1,Len(liste))
	   Else
          block = liste
       End If		  
End Function

Allplan Webentwicklung

Private messages must be private. No support request via Private message.

Hallo Velletti,

habe jetzt das hier probiert, das klappt aber auch nicht.

Function multiLineMax(strText, maxLength)
strRemain = strText
strSub = ""
Do While True
strSub = getWords(strRemain, maxLength)
If Len(strResult) > 0 Then
strResult = strResult + vbCr + vbLf
End If
strResult = strResult + strSub
If Len(strSub) < Len(strRemain) Then
strRemain = Mid(strRemain, Len(strSub) + 2, 999)
Else
Exit Do
End If
Loop
multiLineMax = strResult
End Function

Function getWords(strText, maxLength)
strParts = Split(strText, " ")
strSub = ""
iLen = CInt(maxLength)
For Each strPart In strParts
If Len(strSub) = 0 Then
strSub = strSub & strPart
If (Len(strPart) >= iLen) Then
Exit For
End If
Else
If (Len(strSub & " " & strPart) < iLen) Then
strSub = strSub & " " & strPart
Else
Exit For
End If
End If
Next
getWords = strSub
End Function

Hab somit vbCr, vbLf, VbCr + vbLf, \r\n, "\r\n" ausprobiert.

im Anhang ein Bild. bei vbCr + vbLf kommen jetzt 2 Kästchen an Stelle des Zeilenumbruchs.

muss man den in Allplan irgendwo aktivieren?

oder liegt es vielleicht am Betriebssystem. Nutze Windows 10

mfg

Přílohy (1)

Type: image/jpeg
Staženo 92
Size: 139,19 KiB

Ich würde den Text mal mit der Formel NEU absetzen!
Es könnte sein, daß der alte Text der Vorlage, den Du änderst, noch die alte Einstellung "TextBlock" verwendet. Wenn diese
Eigenschaft nicht gesetzt ist, kann man keinen mehrzeiligen Text erstellen!
Leider kann man diese Eigenschaft im Text-Eigenschafts-Fenster nicht mehr aktiv setzen. Die wurde einfach "wegrationalisiert".
Ein neu abgesetzter Text sollte jedoch die Eigenschaft richtig besitzen...

Ist das eigentlich eine Legende, was Du da erstellst, oder ein Beschriftungsbild?

Habe die Formel neu abgesetzt. gleiches Ergebnis.

ja ist eine Planlegende, damit ich immer nur die 5 neuesten Indizes anzeigen kann.
mit einem Beschriftungsbild kann ich die Auswahl nicht treffen. Da zeigt er alle an und ich brauche entsprechend unterschiedlich Platz, was es schwierig macht eine Materiallegende darüber zu positionieren.

..ich habe das mit einem Beschriftungsbild getestet. Möglich, daß sich die Legende anders verhält.

Ich kann Christophs Beobachtung nur bestätigen.
Was als Beschriftungsbild mit Umbrüchen gut funktioniert ist als Planlegende leider nicht nutzbar. Daher ist Vellettis Weg mit der Excel-Abwandlung von »getTextPart« passender. Einfach die einzelnen Zeilen als Funktion ausgegeben und fertig (dachte ich mir).Allerdings habe ich es bis heute nicht geschafft den Excel Quellcode in Allplan zum laufen zu bekommen.

**************************** Anfang Quellcode ************************************

Public Function getTextPart(LongText, Line, maxLength)
' (c) J.Velletti
' https://connect.allplan.com/de/forum/themen/topic/topics/cad-allgemein-1/beschriftungsbild-mit-zeilenumbruch.html
'
' Ziel: Einen Teilstring aus dem Textwert LongText (= Attribut, andere Zelle etc) zurückliefern.
' Parameter Line sollte > 0 sein.
' maxLength die gewünschte maximale Länge einer Zeile
'
While Line > 0
temp = getOneLine(LongText, maxLength)
' Falls zeile 2 bzw. 3 etc gesucht ist, die vorherige zeile aus LongString entfernen
LongText = Trim(Mid(LongText, Len(temp) + 1, 999))
Line = Line - 1
Wend

' nun den rückgabewert = name der Function setzen !
' dabei das erste ungewollte Leerzeichen entfernen und zur sicherheit auf die maximale Länge bescheinden
getTextPart = Mid(temp, 1, maxLength)

End Function

Private Function getOneLine(workOn, maxLength)

a = Split(workOn, " ")
tempSub = ""
For Each x In a
If (Len(tempSub & " " & x) < maxLength) Then
tempSub = tempSub & " " & x
End If
Next
getOneLine = Mid(tempSub, 2, maxLength)
End Function

**************************** Ende Quellcode ************************************

Hat jemand eine Idee woran es liegt? Anbei die erstaunlicher Weise unterschiedlichen Ergebnisse des selben Codes in Allplan und in Excel.

LG Micha

Přílohy (3)

Type: image/jpeg
Staženo 148
Size: 33,58 KiB
Type: image/jpeg
Staženo 67
Size: 19,33 KiB
Type: image/jpeg
Staženo 169
Size: 102,34 KiB
21 - 27 (27)

https://campus.allplan.com/ používá cookies  -  Více informací

Souhlasím