🍀 Das LibreOffice Forum braucht HEUTE Ihre Hilfe! 🍀
❤️ Spenden Sie jetzt und sichern Sie die Zukunft unseres LibreOffice-Forums ❤️
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen lieben Dank!
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig und kostenlos ihr Wissen teilen.<<
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
CALC ist die Tabellenkalkulation, die Sie immer wollten.
-
karolus
- * LO-Experte *
- Beiträge: 2712
- Registriert: Fr 10. Dez 2010, 10:01
Beitrag
von karolus » So 15. Mär 2026, 14:56
Hallo
Code: Alles auswählen
import re
from com.sun.star.sheet.CellFlags import STRING
rex = re.compile(r'\d')
def repl( s ):
return f'{int(s.group(0))+8320:c}'
def subcodes(*_):
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
for cell in sel.queryContentCells( STRING ).Cells:
cell.String = rex.sub( repl, cell.String)
oder besser gleich per »str.translate«
Code: Alles auswählen
from com.sun.star.sheet.CellFlags import STRING
subs = ''.join(f'{n:c}' for n in range(8320, 8330))
subtable = str.maketrans('0123456789', subs)
def subcodes(*_):
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
for cell in sel.queryContentCells( STRING ).Cells:
cell.String = cell.String.translate(subtable)
Zuletzt geändert von
karolus am So 15. Mär 2026, 15:31, insgesamt 2-mal geändert.
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
-
RPP63
- Beiträge: 233
- Registriert: Sa 21. Apr 2018, 09:33
Beitrag
von RPP63 » So 15. Mär 2026, 14:57
Moin!
Aus Interesse habe ich mal VBA-Makros geschrieben, als xlsm gespeichert und sie in Calc "übersetzen" lassen.
Funktioniert!
Ziffern per Unizeichen tiefstellen:
Code: Alles auswählen
Option VBASupport 1
Option Explicit
Sub Chem()
Dim Cell As Range, i As Byte
If TypeName(Selection) = "Range" Then
For Each Cell In Selection
For i = 1 To Len(Cell.Text)
With Cell.Characters(i, 1)
If IsNumeric(.Text) Then .Text = ChrW(.Text + 8320)
End With
Next
Next
End If
End Sub
Wieder retour:
Code: Alles auswählen
Sub UnChem()
Dim Cell As Range, i As Byte
If TypeName(Selection) = "Range" Then
For Each Cell In Selection
For i = 1 To Len(Cell.Text)
With Cell.Characters(i, 1)
If AscW(.Text) > 8319 And AscW(.Text) < 8330 Then .Text = AscW(.Text) - 8320
End With
Next
Next
End If
End Sub
Ein Feedback auf eine gegebene Lösung tut nicht weh und zeigt Querlesern, dass das Problem gelöst ist.
-
karolus
- * LO-Experte *
- Beiträge: 2712
- Registriert: Fr 10. Dez 2010, 10:01
Beitrag
von karolus » So 15. Mär 2026, 15:57
plus Rückwandlung von tiefgestellten Ziffern zu normalen Ziffern:
Code: Alles auswählen
from com.sun.star.sheet.CellFlags import STRING
subs = ''.join(f'{n:c}' for n in range(8320,8330))
subtable = str.maketrans('0123456789', subs)
asciitable = {v: k for k, v in subtable.items()}
def subcodes(*_):
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
for cell in sel.queryContentCells( STRING ).Cells:
cell.String = cell.String.translate(subtable)
def undo_subcodes(*_):
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
for cell in sel.queryContentCells( STRING ).Cells:
cell.String = cell.String.translate(asciitable)
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
An alle, die das LibreOffice-Forum gern nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das laufende.
Einfach per Kreditkarte oder PayPal. Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️