Support Forum

[Frage] Beschriftungsbild mit Zeilenumbruch

Schlagworte:
  • Allplan2018
  • Beschriftungsbild
  • 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

Hilfreichste Antwort anzeigen Hilfreichste Antwort verbergen

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

11 - 20 (27)

Hallo Nemo,

deine function ist echt klasse.
leider funktioniert sie noch nicht ganz korrekt, da sie die letze zeile nicht anzeigt.

bzw es werden nur drei Zeilen erstellt.

wenn ich bei Zeichen 25 eingebe kommt folgendes raus:

Max Mustermann GmbH und Co
KG Mustermannstadt vertreten
durch Herrn Oberbürgermeister

Der Rest fehlt: Max Mustermann.

wenn ich bei Zeichen 30 eingebe kommt folgendes raus:

Max Mustermann GmbH und Co KG
Mustermannstadt vertreten durch
Herrn Oberbürgermeister Max Mustermann.

Das aber auch nur, weil ich für das Format dann A40 eingegeben habe.

Hast du eine Idee woran es liegen könnte?

mfg Christoph

Zitiert von: Christoph_Schmitz

und beim einbinden in Allplan brauche ich noch Hilfe.
habe es in der Datei unter Nemdaten\Allplan\Std\VBS\functions.vbs mit dem windows editor gespeichert.

Bei mir ist der Ordner VBC kleingeschrieben. macht ggf noch was aus ?
Nemdaten\Allplan\Std\vbs\functions.vbs

Und vermutlich Allplan Neustarten, nachdem die Functions.vbs geändert wurde.

Allplan Webentwicklung

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

Hallo Christoph,

ja, da war noch ein kleiner Bug drin.
So läuft es jetzt, wenn Format = A254

Function multiLineMin(strText,minLength)
	strRemain = strText
	strResult = ""
	iLen=CInt(minLength)
	Do While True
		pos = InStr(iLen,strRemain," ")
		If pos = 0 Then
		    If Len(strResult) > 0 Then
				strResult = strResult + vbCr
		    End If
		    strResult = strResult + strRemain
			strRemain = ""
		    Exit Do
		Else
		    If Len(strResult) > 0 Then
				strResult = strResult + vbCr
		    End If
		    strResult = strResult + Mid(strRemain,1,pos)
		    strRemain = Mid(strRemain,pos+1,Len(strRemain))
		End If
	Loop
	multiLineMin = strResult
End Function

Einfach function.vbs mit'm Texteditor ändern, und dann Funktion "Beschriftungsbilder aktualisieren".
Achtung: Meine Funktion sucht nach Leerzeichen fürhestens nach XX Zeichen, d.h. die Zeilen sind immer mind. XX Zeichen lang.

Wenn man eine "Begrenzung" der Zeilenlänge auf maximal XX Zeichen erzwingen möchte, sollte man diese Funktion(en) benutzen:

Function multiLineMax(strText,maxLength)
    strRemain = strText
	strSub = ""
	Do While True
	    strSub = getWords(strRemain, maxLength)
	    If Len(strResult) > 0 Then
		   strResult = strResult + vbCr
		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
			If (Len(strPart) < iLen) Then
				strSub = strSub & strPart
			Else
				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

...ich bin immer wieder erstaunt was ihr drauf habt....klasse!

gruß dennis

Der, die, das, wer, wie, was, wieso, weshalb, warum, wer nicht fragt, bleibt dumm! Tausend tolle Sachen, die gibt es überall zu seh'n, manchmal muss man fragen, um sie zu versteh'n!

Hallo Jörg

Einfach genial.

Gruss Thierry

https://www.cds-bausoftware.ch
https://www.cds-bausoftware.ch/bundle
https://www.cds-ausbildung.ch

...jeder, der das toll findet sollte folgenden wunsch an allplan äußern

bitte MEHRERE skriptdateien zulassen UND diese in den Optionen eine einstellung, um diese bürobezogen festlegen zu können.

derzeit kann nur eine skript-datei verwendet werden und der pfad ist in der regestry definiert.

Namenlos gezeichnet in vollem Bewusstsein - ignorant, in eigen Augen vermutlich höflich, dennoch unhöflichst, unfreundlichst wer einen/viele vermutete - sich von alters erschließende Namen nennt.
[b]

Hallo Nemo,

habe folgendes Problem.

habe beide Funktionen in die functions.vbs kopiert.
habe auch den pfad in der registry überprüft.

Function multiLineMax(strText,maxLength)
Function getWords(strText, maxLength)

Wenn ich jetzt mit der Funktion Beschriftungsbild --> Formel auswähle und die Formel multiLineMax(@460@,25) eingebe und mit OK bestätige, stürzt Allplan ab. ich kann es dann nicht mehr starten. komme dann in die Lizenzaktivierung.

Es klappt erst wieder wenn ich die Lizenz zurückgebe und wieder neu aktiviere.

ich verstehe nicht was ich falsch mache.

Formel: multiLineMax(@attrNr@;25)
Wichtig: In der Klammer SEMIKOLON
...hatte ich in meiner ersten Antwort auch schon geschrieben.
Dass Allplan bei Komma so grandios abstürzt ist natürlich nicht so schön. Würde ich mal als Fehler melden...

Übrigens:
In getWords war noch ein kleiner Bug, der dann zusschlägt, wenn ein Wort langer als maxLength ist.
Richtig ist es so:

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

Guten Morgen Nemo,

danke für deine Antwort.
War mein Fehler hab in allen Funktionen, aus welchem Grund auch immer Kommas verwendet. Dann konnte das natürlich nicht funktionieren.
Hab jetzt die Funktion "multilineMax" verwendet, da markiert Allplan mir die Leerzeichen, teilt es aber nicht in Zeilen auf.
Anbei 2 Bilder wie es bei mir aussieht.
Wo liegt der Fehler? Muss die Funktion "Zeilen" noch eingebaut werden?

mfg

Anhänge (2)

Typ: image/jpeg
258-mal heruntergeladen
Größe: 220,18 KiB
Typ: image/jpeg
181-mal heruntergeladen
Größe: 179,83 KiB

Welche Allplan-Version hast du denn? Bei mir funktioniert das in Allplan 2018 tadellos!

...sieht aus, als ob der Zeilenrücklauf nicht erkannt wird!
Bei mir Schrift-Font = Arial

Versuch mal für den Zeilenumbruch vbLf statt vbCr in Funktion multiLineMax Zeile 7.
Oder "\r\n" statt vbCr

Wäre schön, wenn hier mal ein Mitarbeiter von Allplan helfen könnte (z.B. Herr Sandner)

11 - 20 (27)