Seite 1 von 1

Zellvorlage ermitteln

Verfasst: Do, 04.01.2007 10:50
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!

Verfasst: Do, 04.01.2007 13:26
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

Verfasst: Do, 04.01.2007 14:04
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

Verfasst: Do, 04.01.2007 15:01
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

Verfasst: Do, 04.01.2007 18:25
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

Verfasst: Do, 04.01.2007 19:02
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