Zellvorlage ermitteln

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Zellvorlage ermitteln

Beitrag von Eia »

Hallo,
könnte jemand von Euch Basic-Programmierern eine Funktion erstellen, mit der man die Vorlage einer Zelle ermittelt und die man z.B. so anwenden könnte:
=ZELLVORLAGE(A1)
Ergebnis wäre der Name der Vorlage von A1
Toll wäre ausch, wenn =ZELLVORLAGE() den Namen der Vorlage der aktuellen Zelle liefern würde.
Schon mal vielen Dank!
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo
Toll wäre ausch, wenn =ZELLVORLAGE() den Namen der Vorlage der aktuellen Zelle liefern würde.
Dafür hab ich eine Lösung gefunden :

Code: Alles auswählen

function Zellvorlage as string
mydoc = thisComponent
'zelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
'zelle = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(adresse)
Zelle=myDoc.getCurrentSelection()
Zellvorlage = zelle.cellstyle
end function
funktioniert aber nicht für :ZELLVORLAGE('andere Zelladresse')

Gruß Karo
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo Eia

Und jetzt noch eine Variante für den Aufruf mit :
=ZELLVORLAGE("A1") !mit Anführungszeichen! oder:
=ZELLVORLAGE(ZELLE("ADDRESS";A1))

Code: Alles auswählen

function Zellvorlage(adresse) as string
mydoc = thisComponent
'zelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
zelle = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(adresse)
'Zelle=myDoc.getCurrentSelection()
Zellvorlage = zelle.cellstyle
end function
ein Aufruf mit :
=ZELLVORLAGE(ZELLE("ADDRESS"))
liefert dir die Vorlage der aktuellen Zelle.


Gruß Karo
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Mein Vorschlag:

Code: Alles auswählen

Function CellStyleName

sModulName = "CellStyleName "
sModulVersion = "20070104 "  ' http://de.openoffice.info/viewtopic.php?t=10443

oDoc = ThisComponent

If Not oDoc.supportsService(_
	"com.sun.star.sheet.SpreadsheetDocument" ) Then
	MsgBox _
		"Diese Funktion wurde nicht von einem Calc-Dokument aufgerufen." & CHR(10) _
		& CHR(10) & "Erklärung:" _
		& CHR(10) & "Diese Funktion meldet die verwendete Zell-Vorlage der aktuellen Zelle" _
		& CHR(10) & "bei CALC-Dateien und funktioniert nur dort." _
		& CHR(10) _
		& CHR(10) & "Diese Funktion wird nun beendet." _
		, 48 , sModulName & sModulVersion
	Exit Function
End If

' get selection
oSel = oDoc.getCurrentSelection

' only one cell?
If Not oSel.supportsService(_
	"com.sun.star.sheet.SheetCell" ) Then
	MsgBox _
		"Falsche Auswahl getroffen." & CHR(10) _
		& CHR(10) & "Erklärung:" _
		& CHR(10) & "Diese Funktion meldet die verwendete Zell-Vorlage der aktuellen Zelle." _
		& CHR(10) & "Die momentane Auswahl ist aber keine (einzelne!) Zelle." _
		& CHR(10) _
		& CHR(10) & "Diese Funktion wird nun beendet." _
		, 48 , sModulName & sModulVersion
	Exit Function
else
	CellStyleName = oSel.CellStyle 
end if

End Function
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Beitrag von Eia »

Zunächst ganz herzlichen Dank!

1. Version:

Code: Alles auswählen

function Zellvorlage as string
mydoc = thisComponent
'zelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
'zelle = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(adresse)
Zelle=myDoc.getCurrentSelection()
Zellvorlage = zelle.cellstyle
end function
funktioniert im Prinzip. Aber nur bei der Ersteingabe. Wenn man nachträglich die Vorlage ändert, wird immer noch die alte angezeigt. Nur wenn man den Zellinhalt löscht und neu eingibt, wird wieder die aktuelle Vorlage gezogen. Aber möglicherweise ist das die übliche Funktionsweise von benutzereigenen Funktionen, das weiss ich nicht.

2, Version

Code: Alles auswählen

function Zellvorlage(adresse) as string
mydoc = thisComponent
'zelle = ThisComponent.Sheets(0).getCellRangeByName(Adresse)
zelle = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(adresse)
'Zelle=myDoc.getCurrentSelection()
Zellvorlage = zelle.cellstyle
end function
liefert bei mir immer default, egal, welche Vorlage zugeordnet ist.

die dritte Version liefert das gleiche Ergebnis wie die erste. Zum aktualisieren muss man auch den Zellinhalt löschen und die Formel neu eingeben.

Ist das immer so bei selbstgebauten Funktionen? Werden die nicht aktualisiert wie die eingebauten?

Schöne Grüsse
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo
Ist das immer so bei selbstgebauten Funktionen? Werden die nicht aktualisiert wie die eingebauten?
Nein, das liegt daran das die Funktion nicht mit den Zellinhalten rechnet, sondern nur das Zellformat abfragt, die Aktualisierung der Funktion kannst du aber auch mit STRG+SHIFT+F9 erzwingen.

Bei mir laufen alle drei Versionen, unter Verwendung der jeweils passenden Syntax:

mit Version 1 und 3 die Vorlage der aktuellen Zelle :
=ZELLVORLAGE()
=CELLSTYLENAME()

mit Version 2 :
=ZELLVORLAGE(ZELLE("ADDRESS")) → Vorlage der Zelle in der die Funktion steht.

=ZELLVORLAGE("A1") oder
=ZELLVORLAGE(ZELLE("ADDRESS";A1)) →Vorlage von A1

Gruß Karo
Antworten