Länge eines Textes bestimmen

Liebe/-r Experte/-in,
Ich suche eine Möglichkeit, die Länge eines Textes zu bestimmen: nicht die Anzahl Zeichen, sondern in Pixel, cm, o.ä. Das alles ist abhängig vom Text, der Schrift, der Schriftgröße, ob fett, kursiv, …

Z.Zt. gehe ich folgenden Weg:
Ich übertrage den Text und die Formatierung in eine Zelle einer ansonsten leeren Spalte, dann setze ich die spalte auf „autofit“
(Columns(„B:B“).EntireColumn.AutoFit)
und dann lese ich die Spaltenbreite.

Das dauert natürlich ewig, und ich denke, daß es da einen einfacheren Weg geben muß. Wäre schön, wenn mir einer von euch helfen könnte!

Danke
Wolfram

Hallo Wolfram,
tut mir Leid, das Problem habe ich bisher auch nicht elegant gelöst, nur ähnlich: schreiben in ein Label mit AutoSize = True und dann Länge abfragen. Die Lösung würde mich aber interessieren, könntest Du mir eine bessere weiterleiten? Danke.
Viel Erfolg
Rainer

Ich nehme an, es geht um Excel…

Wenn man die Metrik des jeweiligen Fonts kennt, kann man die Schriftbreite ausrechnen. Ich habe hier einmal ein Beispiel (für Arial) hineingestellt:
http://www.dbwiki.de/wiki.php?title=VBA_Tipp:_Laufwe…

Gruß
Reinhard Kraasch

Liebe/-r Experte/-in,
Ich suche eine Möglichkeit, die Länge eines Textes zu
bestimmen: nicht die Anzahl Zeichen, sondern in Pixel, cm,
o.ä. Das alles ist abhängig vom Text, der Schrift, der
Schriftgröße, ob fett, kursiv, …

Moin, moin!

Da diese Textlänge, wie Du ja selber schon sagst, von -zig Parametern abhängig ist, glaube ich nicht, dass es einen einfachen Weg gibt, um so eine Länge herauszubekommen. Wenn es jemand besser weiß als ich, wäre ich für eine Mitteilung dankbar!

Ingo
[email protected]

Du brauchst Informationen zu dem verwendeten Schrifttyp:
fuer jedes Zeichen die Breite (fuer normal-, fett-, kursiv-, usw.). Dann kannst du es rechnerisch (z.B. in VBA) berechnen. Wo man diese Informationen bekommt weiss ich auch nicht, also ist deine jetztige Methode auch nicht schlecht…

MfG
Pete

Hallo Wolfram,

eine bessere Methode weiß ich leide auch nicht.

Rita

Hallo Wolfram,
ich wüsste da keine Lösung.
Stöbere mal auf http://www.smarttools.de/ , die haben, soweit ich weiss, einen Tipp-Archiv

MfG
W.W.

Hallo Wolfram-Michael,

ich glaube das es dafür keine Lösung geben wird, denn,
jeder Buchstabe hat seine eigene Breite, die vom Schriftgrafiker visuell festgelegt wurde. Ich denke aber trotzdem mal nach was man da machen könnte. Aber zunächst mal ein Hinweis zum Thema Autofit:
Die optimale Spaltenbreite liefert 2 Werte z.B.10,71(22 Pixel) der Wert vor der Klammer liefert die Anzhl 0 (Nullen) laut Standardschriftart /-schriftgröße. Dieser Wert ist also nicht die Länge die Du vielleicht brauchst.

Ich melde mich wieder
Gruß Reiold

Hallo Wolfram,

dazu fällt mir leider auch keine pauschale Lösung ein. Die Breite der Buchstaben ist ja auch verschieden und je nach Schriftart verschieden, so dass man daraus auch keine Pixellänge o.ö ableiten kann.

Tut mir leid…
Grüße
Surfin Willy

Hallo Wolfram,
Schau mal hier: http://www.spotlight-wissen.de/archiv/message/130143…

Gruß

Phoenica

Sehr geehrter Herr Wolfram,

da die Breite eines angezeigten Zeichens vom
verwendetem Gerät und von der verwendeten Schriftart
abhängt, könnte man versuchen, für jedes Zeichen
einmalig die Breite zu ermitteln und anschließend in
Text die Breite der einzelnen Zeichen anhand einer
mathematischen Formel zusammenaddieren.

Hierzu braucht man eine Tabelle mit allen Zeichen. Mit
Hilfe des Aufrufs .EntireColumn.AutoFit muss die
Optimale Breite einmalig ermittelt werden. Zum Schluss
müssen die Längenangaben z.B. in einem Array
zwischengespeichert werden.
Um die Textlänge von einem beliebigen Text ermitteln zu
können, muss der Text Zeichenweise durchlaufen werden
und die Länge entsprechend der Angaben in Array
zusammenaddiert werden.

Vielleicht hilft dieser Ansatz weiter?

Grüße,
BigBen

Liebe/-r Experte/-in,
Ich suche eine Möglichkeit, die Länge eines Textes zu
bestimmen: nicht die Anzahl Zeichen, sondern in Pixel,

cm,

o.ä. Das alles ist abhängig vom Text, der Schrift, der
Schriftgröße, ob fett, kursiv, …

Z.Zt. gehe ich folgenden Weg:
Ich übertrage den Text und die Formatierung in eine

Zelle

einer ansonsten leeren Spalte, dann setze ich die

spalte auf

„autofit“
(Columns(„B:B“).EntireColumn.AutoFit)
und dann lese ich die Spaltenbreite.

Das dauert natürlich ewig, und ich denke, daß es da

einen

einfacheren Weg geben muß. Wäre schön, wenn mir einer

von euch

helfen könnte!

Danke
Wolfram

Hallo Rainer!
Danke für die antwort, könntest du mir das bitte etwas näher erläutern:
schreiben in ein Label mit AutoSize = :True
Danke
wolfram

Hallo Wolfram,
ich ging davon aus, dass Du mit VBA arbeitest, so habe ich zumindest die Übertragung interpretiert? Wenn ich mit VBA arbeite habe ich meist eine Form mit verschiedenen Objekten (Check-/Optionboxen etc., darunter auch ein Label (das könnte auch direkt in einer Tabelle sein), das ist ein Objekt zur reinen Textanzeige, es kann ausgeblendet werden). Diesem Label muss man dann natürlich die Formateigenschaften (Schriftart, -grösse, fett/normal etc.) und den Text zuweisen. Bei der Eigenschaft AutoSize=True wählt VBA die passende Größe (analog Autofit). Achtung: für das Label darf natürlich nicht Zeilenumbruch gewählt werden! Jetzt alles klar?
Rainer

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Wolfram,

meiner Ansicht nach laesst sich das Problem mit Boardmitteln von EXCEL nicht loesen. Es ist aber durchaus moeglich die Laenge eines Textes in Abhaengigkeit der Formatierung und des Devicecontexts auf dem er ausgegeben wird zu ermitteln. Dazu muss man aber ein wenig in die Tiefen der GDI-API einsteigen.

Die Funktion „GetTextExtentPoint32“ sollte das erledigen koennen. Wie man einen DC erzeugt, mit einem Font, einer Brush etc. versorgt und dann einen Text darauf ausgibt, ist in der MSDN bei MS mit guten Beispielen beschrieben.

Leider kann ich dir keinen einfacheren Loesungsweg anbieten.

Tschau
Peter

Hallo Wolfram,

derzeit ist mir keine andere Möglichkeit bekannt, die Textbreite in Punkt auszulesen. Vielleicht haben wir Glück und Microsoft ergänzt diese Eigenschaft in einer der nächsten Excel-Versionen :wink:

LG Gerd

Hallo Rainer!
Alles klar - Danke

Wolfram

Hallo Wolfram,

war im Urlaub. Bin erst jetzt wieder da. Ist Frage noch aktuell?

Jürgen

ich fürcht, das hätt ich genau so gemacht…
rein interessenshalber: wozu? vielleicht gibts da ne andere möglichkeit…
LG

Wozu?
Ein Text soll mittig in einer Zelle sthen, falls er paßt, ansonsten linksbündig, so daß immer der Textanfang zu sehen ist.
Gehört zwar in die rubrik „in Schönheit sterben“, aber ist nun mal so verlangt.

Im Übrigen: Danke an alle, die bisher geantwortet haben

wolfram

Sorry, keine Anhnung