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

Einzelne Zeichen auf einmal formatieren

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Quinto42
Beiträge: 6
Registriert: Mo 5. Jan 2015, 20:45

Einzelne Zeichen auf einmal formatieren

Beitrag von Quinto42 » Mo 5. Jan 2015, 21:07

Hallo liebe Leute

Ich grübel schon seit längerem an etwas rum und da ich keine Lösung finde, will ich andere fragen.

Ich habe ein Tabellendokument mit Python-Code und ich würde diesen Code nun gerne (wie bei Programmierumgebungen) einfärben. Da wären beispielsweise die Strings, diese fangen ja immer mit einem Apostroph (') an und hören mit einem auf.
Beispielsweise

Code: Alles auswählen

['1', '2', '3']
Da ich natürlich zu faul bin, das jetzt alles zu Fuss einzufärben, versuchte ich mit Suchen und Ersetzen (Reguläre Ausdrücke eingeschaltet) nach '.*' zu suchen. Dies klappte soweit auch, nur wählt er dann die Zellen aus und nicht die einzelnen Inhalte. Soll heissen: Wenn ich jetzt färben will, färbt er die ganzen Zellinhalte ein und nicht nur die gewünschten Zellelemente.

Hat jemand eine Lösung parat? Vielleicht habe ich ja völlig die falsche Funktion benutzt.

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

Re: Einzelne Zeichen auf einmal formatieren

Beitrag von karolus » Mo 5. Jan 2015, 21:48

Hallo

Oha! komplettes Syntaxhightlighting in Calc - das ist nicht gerade einfach.

hier ist nur mal ein Minimal-Beispiel wie man Text mit individueller Formatierung in eine Zelle schreibt.

Code: Alles auswählen

def word_formatter():
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    cursor = sel.createTextCursor()
    sentence = 'nur 33 Wörter'.split()
    sizes = (30,25,15)
    fonts = ('Carlito', 'Linux Biolinum G:name=1', 'Droid Sans')
    colors = [int(color, 16) for color in ('aa0000', '00aa00', '000fff')]
    for word, size, font, color in zip(sentence, sizes, fonts, colors):
        cursor = cursor.End
        cursor.CharHeight = size
        cursor.CharFontName = font
        cursor.CharColor = color
        cursor.Text.insertString(cursor, '%s\n' % word, False) 
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Quinto42
Beiträge: 6
Registriert: Mo 5. Jan 2015, 20:45

Re: Einzelne Zeichen auf einmal formatieren

Beitrag von Quinto42 » Sa 10. Jan 2015, 18:43

Da bin ich wohl jetzt etwas überfordert :D Ich bin noch nicht sehr lange bei LibreOffice. Ich benutzte vorher Excel. Wo kann ich solche Funktionen definieren? Kann man sowas vielleicht sogar in der Formatvorlage definieren?

Also ich schreibe irgendetwas normal in eine Zelle, z.B.

Code: Alles auswählen

['1', '2', '3']
Und möchte dann dieses Syntaxhighlighting, ohne, dass ich den Text separat einfärbe. -->

Code: Alles auswählen

['1', '2', '3'] 
Für den Anfang reich ein Highlighting für die Zeichenketten.

Danke bisher

Benutzeravatar
lorbass
* LO-Experte *
Beiträge: 627
Registriert: Mo 25. Apr 2011, 18:17

Re: Einzelne Zeichen auf einmal formatieren

Beitrag von lorbass » So 11. Jan 2015, 13:30

Quinto42 hat geschrieben:Für den Anfang reich ein Highlighting für die Zeichenketten.
Na, da hat Karolus ja genau das richtige getroffen:
karolus hat geschrieben:hier ist nur mal ein Minimal-Beispiel wie man Text mit individueller Formatierung in eine Zelle schreibt.
Du wirst nicht umhinkommen, dich mit der Programmierung deiner Funktionen etwa in StarBasic, Java oder Python zu beschäftigen. Hilfe dazu bekommst du in diesem Forum im Bereich LibreOffice Programmierung. Informationen rund um den Einstieg in die StarBasic-Programmierung findest du im Forum OpenOffice.info im Beitrag Informationen zur StarBasic-Programmierung.

Gruß
lorbass

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

Re: Einzelne Zeichen auf einmal formatieren

Beitrag von karolus » So 11. Jan 2015, 20:06

Hallo

Ich hatte ja schon länger daran gedacht, in der Richtung etwas zu basteln.

Dazu brauchst du aber `pygments` - installieren am besten mit:

Code: Alles auswählen

pip3 install pygments --user
siehe angehängtes Beispieldokument.

Code: Alles auswählen

from pygments import lex
from pygments.lexers import Python3Lexer as py3
from pygments.styles.default import DefaultStyle

from com.sun.star.awt.FontSlant import ITALIC, NONE

style = DefaultStyle().styles

def getprops(keyval):
    
    color, slant, weight = -1, NONE, 100.0
    keyval = keyval.split('#')    
    if len(keyval)==2:
        color = int(keyval[1],16)
    attribut = keyval[0]
    if attribut and not attribut.startswith('no'):
        if 'bold' in attribut:
            weight = 150.0
        if 'italic' in attribut:
            slant = ITALIC
    return (color, weight, slant)

def write_format_token(cursor, string, props):
    propnames = ('CharColor','CharWeight', 'CharPosture')
    cursor.setPropertyValues(propnames, props)
    cursor.Text.insertString(cursor, '%s' % string, False) 
    
def main(*_):
    sel = XSCRIPTCONTEXT.getDocument().CurrentSelection
    if not hasattr(sel, 'String' ):
        sel = sel.getByIndex(0)
    code = sel.String.strip()
    sel.String = ''
    cursor = sel.createTextCursor()
    cursor.CharFontName = 'Source Code Pro'
    loc = cursor.CharLocale
    loc.Language = 'zxx'
    loc.Country = ''
    loc.Variant =''
    cursor.CharLocale = loc
    formatdict = dict()
    for propkey, string in lex(code, py3()):
        if not propkey in formatdict:
            formatdict[propkey] = getprops(style[propkey])
        cursor = cursor.End
        write_format_token(cursor, string, formatdict[propkey])
        
 
codehightlight.ods
(35.04 KiB) 131-mal heruntergeladen
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