Seite 1 von 1

Calc-Funktionen

Verfasst: Sa, 16.08.2008 13:44
von keksi1970
Hi,

also folgendes Problem :

warum funktioniert :

Code: Alles auswählen

Function checkKW(datum as date)as integer
Dim AuswertungDatum as string
Dim args( 1 ) As Variant

oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
AuswertungDatum = datum

args(0) = AuswertungDatum
args(1) = "2"
        
CheckKW = oFunctionAccess.callFunction( "WEEKNUM", args() ) 
End Function
wie gewünscht (Soll mir die KW des Datums anzeigen)

während :

Code: Alles auswählen

 Function checkWochen(startdatum as date, Enddatum as date)as integer

Dim args( 2 ) As Variant

oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )

args(0) = startdatum
args(1) = Enddatum
args(2) = "1"

checkWochen = oFunctionAccess.callFunction( "WEEKS", args() ) 
End Function
die Fehlermeldung "Objektvariable nicht belegt" zeigt

Code: Alles auswählen

REM  *****  BASIC  *****
Dim AuswertungsDoc as object
Dim Auswertungssheet as Object

dim AD as date
dim ED as date

Dim startdatum as date
dim enddatum as date


Sub Main

AuswertungsDoc = ThisComponent
Auswertungssheet = Auswertungsdoc.sheets(0)

AD = Auswertungssheet.getcellrangebyname("F2").value
ED = Auswertungssheet.getcellrangebyname("G2").value

datumKW = checkKW(AD)
print datumKW
Wochen = checkWochen(AD,ED)
print Wochen
End Sub
Damit rufe ich die Funktionen auf.

Wäre schön wenn mit das einer erklären könnte

LG Andreas

Re: Calc-Funktionen

Verfasst: Sa, 16.08.2008 22:44
von komma4
Ich kann Dir nicht erklären, warum die erste Variante funktioniert.

FunctionAccess
verlangt die Übergabe der Parameter als Long oder Double, nicht als date.

Es funktioniert hier (2,4,1 deutsch/Linux):

Code: Alles auswählen

   Function checkWochen(startdatum , Enddatum )as integer
    Dim args( 2 ) 

    oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )

    args(0) = startdatum 
    args(1) = Enddatum 
    args(2) = "1"

    checkWochen = oFunctionAccess.callFunction( "WOCHEN" , args() )

    End Function

WEEKS ergibt NoSuchElementException

Code: Alles auswählen

' Array der FunktionsBeschreibungen
aFBn = _
 createUnoService( "com.sun.star.sheet.FunctionDescriptions" )

If aFBn.hasByName( "WOCHEN" ) Then
	' einzelne FunktionsBeschreibung
	aEineFB = aFBn.getByName( "WOCHEN" )
Else 
	print "WOCHEN Funktion nicht vorhanden"
End If

If aFBn.hasByName( "WEEKS" ) Then
	' einzelne FunktionsBeschreibung
	aEineFB = aFBn.getByName( "WEEKS" )
Else 
	print "WEEKS Funktion nicht vorhanden"
End If

Wie gesagt: ich kann Dir nicht erklären, warum die Variante nur mit WEEKNUM geht, aber nicht mit KALENDERWOCHE

Re: Calc-Funktionen

Verfasst: So, 17.08.2008 00:19
von keksi1970
also werde ich wohl auf die Funktion verzichten müssen.

in Version 2.31 unter Windows funktionieren die deutschen Bezeichnungen nicht und WEEKS geht auch nicht :/

oder hat jemand ne Idee, wie ich relativ einfach die Anzahl der Wochen bestimmen kann ?


lg
Andreas

Verfasst: So, 17.08.2008 01:21
von komma4
Zur Präzisierung, Andreas:

Du hast den geänderten Funktionsaufruf WEEKS gesehen?

Code: Alles auswählen

    Function checkWochen(startdatum , Enddatum )as integer
Keine Übergabe als date !



Der folgende Code gibt dir aus, was Du nutzen kannst:

Code: Alles auswählen

 ' 2008-08-17
Sub zeigeFunctionDescriptions

' Array der FunktionsBeschreibungen
aFBn = _
 createUnoService( "com.sun.star.sheet.FunctionDescriptions" )

sAlleFunktionen = "=== Funktionsnamen ===" & CHR(13)
for i = lBound( aFBn.ElementNames ) to uBound( aFBn.ElementNames ) 

 aFB = aFBn.getByIndex( i )
 for j = lBound( aFB ) to uBound( aFB ) 
 	If aFB( j ).Name = "Name" Then
		sAlleFunktionen = _
	 	sAlleFunktionen & aFB( j ).Value & CHR(13) 
 	End If
 Next

Next

' Ausgabe in ein Writer-Dokument,
' folgende Anweisung aus TOOLS/Debug kopiert
	LocUrl = "private:factory/swriter"
	
	' NoArgs durch Array() ersetzt
	oLocDocument = _
	StarDesktop.LoadComponentFromURL(LocUrl,"_default",0,Array())
	oLocText = oLocDocument.text
	oLocCursor = oLocText.createTextCursor()
	oLocCursor.gotoStart(False)
	' eigene STRING-Variable ausgeben
	oLocText.insertString(oLocCursor,sAlleFunktionen,False)
' -----------------------------------------------------------



End Sub
Ich kann nicht erklären warum WEEKNUM funktioniert (obwohl nicht in der Liste), mit einem date-Parameter.

Und es könnte an der 2.3.1 liegen!
Suche in der Fehlerliste

Re: Calc-Funktionen

Verfasst: So, 17.08.2008 10:32
von keksi1970
Hi

Weeknum funktioniert, ebenso wie alle anderen Daten-Funktionen, die lt. OO-Wiki, als Argument NUMBER brauchen, daher ruf ich zwar die Prozedur mit datum auf, ändere es aber in einen string. (Warum ist mir eigentlich reltiv egal :D )

Die Funktionen, die ein Datum benötigen, krieg ich einfach nicht hin.

=WEEKNUM (number; mode)
=MINUTE (number)
=WEEKDAY (number; type)

funktioniert, während
=WEEKS (start date; end date; type)
=WEEKNUM_ADD (date; return type)

nicht funktioniert.

lg Andreas

Re: Calc-Funktionen

Verfasst: Mi, 20.08.2008 20:57
von hawe
Hm, bleib doch einfach bei den Funktionen die Basic bietet.
Bei mir 2.4.1 Win funktioniert der Aufruf WEEK nicht dagegen aber WOCHEN.
Nach meinen Erfahrungen funktioniert WEEK wie

Code: Alles auswählen

Function Week(date1 as Date, Date2 as Date) as Integer
Dim d as double
d = Date2 - Date1
Week = int(d/7) - ((d mod 7)>1)*1
End Function
Gruß HW
Hans W. Hofmann

Re: Calc-Funktionen

Verfasst: Mi, 20.08.2008 22:53
von keksi1970
brauch ich wenigstens keine hilfszeile mehr :D

danke dir, auf die idee bin ich jetzt nu nich gekommen, naja, ich brauch urlaub :D

lg andreas