Seite 1 von 1

Calc-Tabelle: Spalten-NAMEN umwandeln in Spalten-INDEX (z.B. "C" in 2)

Verfasst: Do 10. Okt 2024, 12:45
von Proma
Hallo liebe Experten,

kürzlich habe ich hier https://de.openoffice.info/viewtopic.php?t=77152 eine Function von Karolus entdeckt, mit deren Hilfe der Spalten-Index (z.B. 2) in den Spalten-Namen (z.B. "C") umgewandelt werden kann. Nun hätte ich gerne eine Lösung für den umgekehrten Weg, also wie ich vom Spalten-Namen zum Spalten-Index gelangen kann. Ich habe mir schon die Finger wund gegoogelt aber nirgendwo etwas Passendes gefunden.

Meine Ausstattung:
Windows 11,
LibreOffice 24.2

Vorab vielen Dank für Eure Unterstützug und liebe Grüße
vom Martin

Re: Calc-Tabelle: Spalten-NAMEN umwandeln in Spalten-INDEX (z.B. "C" in 2)

Verfasst: Do 10. Okt 2024, 16:57
von karolus
Hallo

Code: Alles auswählen

doc = XSCRIPTCONTEXT.getDocument()
address = doc.Sheets[0].Columns["ABZ"].RangeAddress
print(address.StartColumn)
oder brav als Basic-Code:

Code: Alles auswählen

Sub Main
	print col_index("ABC")

End Sub

function col_index( col_name )
	sheet = thisComponent.Sheets(0)
	column = sheet.Columns.getByName( col_name )
	address = column.RangeAddress
	col_index = address.StartColumn
end function
und mit nativen python-mitteln ohne den Umweg über die LO-API:

Code: Alles auswählen

from string import ascii_uppercase as alphabet

alphabet = f"_{alphabet}"

def name2index( name ):
    name = reversed(name.upper())
    return sum(alphabet.index(char) * 26**exponent
               for exponent, char in enumerate(name)) - 1

Re: Calc-Tabelle: Spalten-NAMEN umwandeln in Spalten-INDEX (z.B. "C" in 2)

Verfasst: Do 10. Okt 2024, 19:37
von Proma
Hallo Karolus,

großartig! Vielen Dank für die schnelle und ausführliche Antwort; das hilft mir nicht nur bei meinem momentanen Problem weiter sondern gibt mir auch Anregung für weitere Nachforschungen.

Vielen Dank und liebe Grüße
vom Martin