Calc-Funktionen

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

Moderator: Moderatoren

keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Calc-Funktionen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Calc-Funktionen

Beitrag 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
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)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Calc-Funktionen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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
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)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Calc-Funktionen

Beitrag 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
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Calc-Funktionen

Beitrag 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
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Calc-Funktionen

Beitrag 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
Antworten