🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ 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. 🤗

Format in allen Zellen einer Spalte setzen [GELÖST]

Alles zur Programmierung im LibreOffice.
Antworten
Rolf_V
Beiträge: 23
Registriert: Mi 2. Mär 2022, 19:09

Format in allen Zellen einer Spalte setzen [GELÖST]

Beitrag von Rolf_V » Sa 16. Nov 2024, 15:39

Ich möchte mit einem Makro das Zahlenformat aller Zellen einer Spalte auf 114 (=Dezimalzahl mit 2 Nachkommastellen, Tausenderpunkt, negativ rot) setzen. Mein Kode sieht so aus:

Code: Alles auswählen

sub main
...
setDecInCol(4,114)
...
end sub

sub setDecInCol(S,F)
	thiscomponent.CurrentController.Select(thiscomponent.Sheets(0).getColumns().getByIndex(S))
	thiscomponent.getCurrentSelection().NumberFormat = F
end sub
Die Spalte wird zwar ausgewählt, aber dann passiert nichts. Bei Dannenhöfer und Pitonyak habe ich keine funktionierenden Vorschläge gefunden. Es kamen entweder Fehlermeldungen, mit denen ich nicht anfangen kann, oder es passierte gar nichts.
Wo liegt mein Fehler?
Zuletzt geändert von Rolf_V am So 17. Nov 2024, 10:54, insgesamt 1-mal geändert.

mikele
* LO-Experte *
Beiträge: 1929
Registriert: Mo 1. Aug 2011, 20:51

Re: Format in allen Zellen einer Spalte setzen

Beitrag von mikele » Sa 16. Nov 2024, 17:18

Hallo,
woher weißt du, dass dieses Format den Key 114 hat? Bei mir passiert auch nichts, da dieser Key bei mir nicht existiert.
Gruß,
mikele

mikele
* LO-Experte *
Beiträge: 1929
Registriert: Mo 1. Aug 2011, 20:51

Re: Format in allen Zellen einer Spalte setzen

Beitrag von mikele » Sa 16. Nov 2024, 17:48

Hallo,
um das sauber zu lösen, müsste zunächst die korrekter Nummer des Zahlenformats herausgefunden werden.
Das geht z. B. mit folgender Funktion:

Code: Alles auswählen

Function numkey (formatstring)

	Dim sLocale as New com.sun.star.lang.Locale
	NumForms = ThisComponent.getNumberFormats()
	NumKey = NumForms.queryKey(FormatString, sLocale, True)
	IF NumKey = -1 Then  '-1 means no value found for the requested format
		NumKey = NumForms.addNew(FormatString, sLocale) 'create a new key
	end if

End Function
Sie liefert die Nummer des übergebenen Zahlenformats (als formatstrings). Sollte es noch nicht existieren, wird es gleich mit angelegt.
Dann kannst du es in deinem Code verwenden, z. B. so (etwas abgewandelt):

Code: Alles auswählen

sub main
...
setDecInCol(4,"#.##0,00;[ROT]-#.##0,00")
...
end sub

sub setDecInCol(S,F)
	Thiscomponent.CurrentController.ActiveSheet.Columns(S).NumberFormat = numkey(F)
end sub
Ob für so einen Einzeiler eine extra Sub sinnvoll ist ... Wenn in der sub main die gewünschte Tabelle schon angesprochen wurde, z. B.

Code: Alles auswählen

Tabelle=ThisComponent.Sheets(0)
dann würde sich das ganze ja auf

Code: Alles auswählen

sub setDecInCol(S,F)
	Tabelle.Columns(S).NumberFormat = numkey(F)
end sub
reduzieren.
Gruß,
mikele

Rolf_V
Beiträge: 23
Registriert: Mi 2. Mär 2022, 19:09

Re: Format in allen Zellen einer Spalte setzen

Beitrag von Rolf_V » Sa 16. Nov 2024, 18:03

mikele hat geschrieben:
Sa 16. Nov 2024, 17:18
Hallo,
woher weißt du, dass dieses Format den Key 114 hat? Bei mir passiert auch nichts, da dieser Key bei mir nicht existiert.
Dafür habe ich das Makro

Code: Alles auswählen

sub ZeigeZellFormat
	msgbox thiscomponent.getCurrentSelection().NumberFormat
end sub

mikele
* LO-Experte *
Beiträge: 1929
Registriert: Mo 1. Aug 2011, 20:51

Re: Format in allen Zellen einer Spalte setzen

Beitrag von mikele » Sa 16. Nov 2024, 18:11

Hallo,
dann ist eigentlich alles korrekt ...
Da du auf der 1. Tabelle arbeiten willst, reicht aber

Code: Alles auswählen

sub setDecInCol(S,F)
	Thiscomponent.Sheets(0).Columns(S).NumberFormat = F
end sub
Gruß,
mikele

Rolf_V
Beiträge: 23
Registriert: Mi 2. Mär 2022, 19:09

Re: Format in allen Zellen einer Spalte setzen [GELÖST]

Beitrag von Rolf_V » Sa 16. Nov 2024, 18:23

mikele hat geschrieben:
Sa 16. Nov 2024, 17:48
Hallo,
um das sauber zu lösen, müsste zunächst die korrekter Nummer des Zahlenformats herausgefunden werden.
Das geht z. B. mit folgender Funktion:

Code: Alles auswählen

Function numkey (formatstring)
	Dim sLocale as New com.sun.star.lang.Locale
	NumForms = ThisComponent.getNumberFormats()
	NumKey = NumForms.queryKey(FormatString, sLocale, True)
	IF NumKey = -1 Then  '-1 means no value found for the requested format
		NumKey = NumForms.addNew(FormatString, sLocale) 'create a new key
	end if
End Function
Sie liefert die Nummer des übergebenen Zahlenformats (als formatstrings). Sollte es noch nicht existieren, wird es gleich mit angelegt.
Auch mit dieser Funktion erhalte ich für dieses Format die 114
mikele hat geschrieben:
Sa 16. Nov 2024, 17:48
Ob für so einen Einzeiler eine extra Sub sinnvoll ist ... Wenn in der sub main die gewünschte Tabelle schon angesprochen wurde, z. B.

Code: Alles auswählen

Tabelle=ThisComponent.Sheets(0)
dann würde sich das ganze ja auf

Code: Alles auswählen

sub setDecInCol(S,F)
	Tabelle.Columns(S).NumberFormat = numkey(F)
end sub
reduzieren.
Mein Makro ist sehr viel länger, es werden verschiedene gleichzeitig geöffnete Tabellen angesprochen.
Genau Deine letzte Code-Zeile ist das, was ich gesucht habe.
Danke, Mikele


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