🚨 Das LibreOffice Forum braucht jetzt Ihre Hilfe! 🚨
🙏 Spenden Sie heute 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: 2692
- 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: 230
- 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: 2692
- 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 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.