Tabellenfunktionen in Basic?

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

Moderator: Moderatoren

kann_nix
Beiträge: 4
Registriert: Di, 16.08.2005 21:40

Tabellenfunktionen in Basic?

Beitrag von kann_nix »

Mit dem Funktionsautopiloten kann man eine menge Funktionen aufrufen.
Aber in Basic funzen die nicht.
OK, habe ich mir gedacht, die werden in Basic wohl englisch sein.
Nach einigen Fehlversuchen habe ich nach Übersetztungsdateien in OO gesucht und auch was gefunden. Das einzige, was auf anhieb funktionierte war NOW().
Ein mageres Ergebnis...

Dann habe ich eine Funktion in eine Zelle geschrieben, mit Basic .getFormula() ausgelesen und als String in eine andere Zelle wieder reingeschrieben. Das Ergebnis sah dann etwa so aus:

=com.star.sun.sheet.addin.DateFunctions.getDaysInMonth(38580)

Dieses Ergebnis habe ich dann mit Basic .setFormula() in eine Zelle geschrieben diese dann wieder ausgelesen.
So bin ich dann auf die gewünschte anzahl Tage im Monat gekommen.

--- Aber das kann's ja wohl nicht sein... :( ---
Geht das nicht ein *bisschen* einfacher?

Was ich wirklich brauche, sind Datumsfunktionen in Basic.

Und:
kann man sich die ZellenID geben lassen?
Sprich pos. 0,0 zu "A1"
Da konnte ich auch mit XRay nichts brauchbares finden. Vieleicht habe ich es auch einfach übersehen...

MfG
kann_nix
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Nach einigen Fehlversuchen habe ich nach Übersetztungsdateien in OO gesucht und auch was gefunden. Das einzige, was auf anhieb funktionierte war NOW().
Ein mageres Ergebnis...
Hier sind die Gegenüberstellungen:

Code: Alles auswählen

Calc-Funktionen --> Funktionsname (englisch)

ABRUNDEN (ROUNDDOWN); ABS (ABS); ACHSENABSCHNITT (INTERCEPT); ADRESSE (ADRESS); AKTUELL (CURRENT); ANZAHL (COUNT); ANZAHL2 (COUNTA); ANZAHLLEEREZELLEN (COUNTBLANK); ARCCOS (ACOS); ARCCOT (ACOT); ARCOSHYP (ACOSH); ARCOTHYP (ACOTH); ARCSIN (ASIN); ARCTAN (ATAN); ARCTAN2 (ATAN2); ARSINHYP (ASINH); ARTANHYP (ATANH); AUFRUNDEN (ROUNDUP); B (B); BEREICHE (AREAS); BESTIMMTHEITSMASS (RSQ); BETAINV (BETAINV); BETAVERT (BETADIST); BINOMVERT (BINOMDIST); BW (PV); CHIINV (CHIINV); CHITEST (CHITEST); CHIVERT (CHIDIST); CODE (CODE); COS (COS); COSHYP (COSH); COT (COT); COTHYP (COTH); DATUM (DATE); DATWERT (DATEVALUE); DBANZAHL (DCOUNT); DBANZAHL2 (DCOUNTA); DBAUSZUG (DGET); DBMAX(DMAX); DBMIN (DMIN); DBMITTELWERT (DAVERAGE); DBPRODUKT (DPRODUCT); DBSTDABW (DSTDEV); DBSTDABWN (DSTDEVP); DBSUMME (DSUM); DBVARIANZ (DVAR); DBVARIANZEN (DVARP); DDE (DDE); DEG (DEGREES); DIA (SYD); DM (DOLLAR); EFFEKTIV (EFFECTIVE); EINHEITSMATRIX (MUNIT); ERSETZEN (REPLACE); EXP (EXP); EXPONVERT (EXPONDIST); FAKULTAET (FACT); 0(FALSE); FEHLERTYP (ERRORTYPE); FEST (FIXED); FINDEN (FIND); FINV (FINV); FISHER (FISHER); FISHERINV (FISHERINV); FTEST (FTEST); FVERT (FDIST); GAMMAINV (GAMMAINV); GAMMALN (GAMMALN); GAMMAVERT (GAMMADIST); GANZZAHL (TRUNC); GAUSS (GAUSS); GDA (DDB); GDA2 (DB); GEOMITTEL (GEOMEAN); GERADE (EVEN); GESTUTZTMITTEL (TRIMMEAN); GGT (GCD); GLAETTEN (TRIM); GROSS (UPPER); GROSS2 (PROPER); GTEST (ZTEST); HAEUFIGKEIT (FREQUENCY); HARMITTEL (HARMEAN); HEUTE (TODAY); HYPGEOMVERT (HYPGEOMDIST); IDENTISCH (EXACT); IKV (IRR); INDEX (INDEX); INDIREKT (INDIRECT); ISTBEZUG (ISREF); ISTFEHL (ISERR); ISTFEHLER (ISERROR); ISTFORMEL (ISFORMULA); ISTGERADE (ISEVEN); ISTKTEXT (ISNONTEXT); ISTLEER (ISBLANK); ISTLOG (ISLOGICAL); ISTNV (ISNA); ISTTEXT (ISTEXT); ISTUNGERADE (ISODD); ISTZAHL (ISNUMBER); JAHR (YEAR); JETZT (NOW); KALENDERWOCHE (WEEKOFYEAR); KAPZ (IPMT); KGROESSTE (LARGE); KGV (LCD); KKLEINSTE (SMALL); KLEIN (LOWER); KOMBINATIONEN (COMBIN); KOMBINATIONEN2 (COMBINA); KONFIDENZ (CONFIDENCE); KORREL (CORREL); KOVAR (COVAR); KRITBINOM (CRITBINOM); KUERZEN (INT); KUMKAPITAL (CUMIPMT); KUMZINSZ (CUMPPMT); KURT (KURT); LAENGE (LEN); LAUFZEIT (DURATION); LIA (SLN); LINKS (LEFT); LN (LN); LOG (LOG); LOG10 (LOG10); LOGINV (LOGINV); LOGNORMVERT (LOGNORMDIST); MAX (MAX); MDET (MDETERM); MEDIAN (MEDIAN); MIN (MIN); MINUTE (MINUTE); MINV (MINVERSE); MITTELABW (AVEDEV); MITTELWERT (AVERAGE); MMULT (MMULT); MODALWERT (MODE); MONAT (MONTH); MTRANS (MTRANS); N (N); NBW (NPV); NEGBINOMVERT (NEGBINOMDIST); NICHT (NOT); NOMINAL (NOMINAL); NORMINV (NORMINV); NORMVERT (NORMDIST); NV (NA); OBERGRENZE (CEIL); ODER (OR); PEARSON (PEARSON); PHI (PHI); PI (PI); POISSON (POISSON); POTENZ (POWER); PRODUKT (PRODUCT); QUADRATESUMME (SUMSQ); QUANTIL (PERCENTILE); QUANTILSRANG (PERCENTRANK); QUARTILE (QUARTILE); RAD (RADIANS); RANG (RANK); RECHTS (RIGHT); REST (MOD); RGP (LINEST); RKP (LOGEST); RMZ (PMT); RUNDEN (ROUND); SAEUBERN (CLEAN); SCHAETZER (FORECAST); SCHIEFE (SKEW); SEKUNDE (SECOND); SIN (SIN); SINHYP (SINH); SPALTE (COLUMN); SPALTEN (COLUMNS); STABW (STDEV); STABWN (STDEVP); STANDARDISIERUNG (STANDARDIZE); STANDNORMINV (NORMSINV); STANDNORMVERT (NORMSDIST); STEIGUNG (SLOPE); STFEHLERYX (STEYX); STUNDE (HOUR); SUCHEN (SEARCH); SUMME (SUM); SUMMENPRODUKT (SUMPRODUCT); SUMMEWENN (SUMIF); SUMMEX2MY2 (SUMX2MY2); SUMMEX2PY2 (SUMX2DY2); SUMMEXMY2 (SUMXMY2); SUMQUADABW (DEVSQ); SVERWEIS (VLOOKUP); T (T); TAG (DAY); TAGE (DAYS); TAGE360 (DAYS360); TAN (TAN); TANHYP (TANH); TEIL (MID); TEILERGEBNIS (SUBTOTAL); TEXT (TEXT); TINV (TINV); TREND (TREND); TTEST (TTEST); TVERT (TDIST); TYP (TYPE); UND (AND); UNGERADE (ODD); UNTERGRENZE (FLOOR); VARIANZ (VAR); VARIANZEN (VARP); VARIATION (GROWTH); VARIATIONEN (PERMUT); VARIATIONEN2 (PERMUTA); VDB (VDB); VERGLEICH (MATCH); VERKETTEN (CONCATENATE); VERSCHIEBUNG (OFFSET); VERWEIS (LOOKUP); VORLAGE (STYLE); VORZEICHEN (SIGN); WAHL (CHOOSE); 1(TRUE); WAHRSCHBEREICH (PROB); WECHSELN (SUBSTITUTE); WEIBULL (WEIBULL); WENN (IF); WERT (VALUE); WIEDERHOLEN (REPT); WOCHENTAG (WEEKDAY); WURZEL (SQRT); WVERWEIS (HLOOKUP); ZAEHLENWENN (COUNTIF); ZEICHEN (CHAR); ZEILE (ROW); ZEILEN (ROWS); ZEIT (TIME); ZEITWERT (TIMEVALUE); ZGZ (ZGZ); ZINS (RATE); ZINSZ (PPMT); ZUFALLSZAHL (RAND); ZW (FV); ZZR (NPER); AMORDEGRK (AMORDEGRC ); AMORLINEARK (AMORLINC ); ARBEITSTAG (WORKDAY ); AUFGELZINS (ACCRINT ); AUFGELZINSF (ACCRINTM ); AUSZAHLUNG (RECEIVED ); BESSELI (BESSELI ); BESSELJ (BESSELJ ); BESSELK (BESSELK ); BESSELY (BESSELY ); BININDEZ (BIN2DEC ); BININHEX (BIN2HEX ); BININOKT (BIN2OCT ); BRTEILJAHRE (YEARFRAC ); DELTA (DELTA ); DEZINBIN (DEC2BIN ); DEZINHEX (DEC2HEX ); DEZINOKT (DEC2OCT ); DISAGIO (DISC ); DURATION (DURATION ); EDATUM (EDATE ); EFFEKTIV_ADD (EFFECT_ADD ); GAUSSFEHLER (ERF ); GAUSSFKOMPL (ERFC ); GGANZZAHL (GESTEP ); GGT_ADD (GCD_ADD ); HEXINBIN (HEX2BIN ); HEXINDEZ (HEX2DEC ); HEXINOKT (HEX2OCT ); IMABS (IMABS ); IMAGINÄRTEIL (IMAGINARY ); IMAPOTENZ (IMPOWER ); IMARGUMENT (IMARGUMENT ); IMCOS (IMCOS ); IMDIV (IMDIV ); IMEXP (IMEXP ); IMKONJUGIERTE (IMCONJUGATE ); IMLN (IMLN ); IMLOG10 (IMLOG10 ); IMLOG2 (IMLOG2 ); IMPRODUKT (IMPRODUCT ); IMREALTEIL (IMREAL ); IMSIN (IMSIN ); IMSUB (IMSUB ); IMSUMME (IMSUM ); IMWURZEL (IMSQRT ); ISTGERADE_ADD (ISEVEN_ADD ); ISTSCHALTJAHR (ISLEAPYEAR); ISTUNGERADE_ADD (ISODD_ADD ); JAHRE (YEARS); KALENDERWOCHE_ADD (WEEKNUM_ADD); KGV_ADD (LCM_ADD ); KOMPLEXE (COMPLEX ); KUMKAPITAL_ADD (CUMPRINC_ADD ); KUMZINSZ_ADD (CUMIPMT_ADD ); KURS (PRICE ); KURSDISAGIO (PRICEDISC ); KURSFÄLLIG (PRICEMAT ); MDURATION (MDURATION ); MONATE (MONTHS); MONATSENDE (EOMONTH ); NETTOARBEITSTAGE (NETWORKDAYS ); NOMINAL_ADD (NOMINAL_ADD ); NOTIERUNGBRU (DOLLARFR ); NOTIERUNGDEZ (DOLLARDE ); OKTINBIN (OCT2BIN ); OKTINDEZ (OCT2DEC ); OKTINHEX (OCT2HEX ); POLYNOMIAL (MULTINOMIAL ); POTENZREIHE (SERIESSUM ); QUOTIENT (QUOTIENT ); RENDITE (YIELD ); RENDITEDIS (YIELDDISC ); RENDITEFÄLL (YIELDMAT ); ROT13 (ROT13); TAGEIMJAHR (DAYSINYEAR); TAGEIMMONAT (DAYSINMONTH); TBILLKURS (TBILLPRICE ); TBILLRENDITE (TBILLYIELD ); TBILLÄQUIV (TBILLEQ ); UMWANDELN_ADD (CONVERT_ADD ); UNREGER.KURS (ODDFPRICE ); UNREGER.REND (ODDFYIELD ); UNREGLE.KURS (ODDLPRICE ); UNREGLE.REND (ODDLYIELD ); VRUNDEN (MROUND ); WOCHEN (WEEKS); WOCHENIMJAHR (WEEKSINYEAR); WURZELPI (SQRTPI ); XINTZINSFUSS (XIRR ); XKAPITALWERT (XNPV ); ZINSSATZ (INTRATE ); ZINSTERMNZ (COUPNCD ); ZINSTERMTAGE (COUPDAYS ); ZINSTERMTAGNZ (COUPDAYSNC ); ZINSTERMTAGVA (COUPDAYBS ); ZINSTERMVZ (COUPPCD ); ZINSTERMZAHL (COUPNUM ); ZUFALLSBEREICH (RANDBETWEEN ); ZW2 (VSCHEDULE ); ZWEIFAKULTÄT (FACTDOUBLE );


Eigentlich sollten sich alle Funktionen in Basic prinzipiell so aufrufen lassen (ein Teil der Funktionen ist ohnehin in Basic enthalten und direkt zu verwenden):

Code: Alles auswählen

Function funktionAufrufen ( value as Double ) As Double
' Variablen deklarieren
Dim oFunktion as Object
' com.sun.star.sheet.FunctionAccess holen
oFunktion = createUnoService("com.sun.star.sheet.FunctionAccess")
' als Argumente ein Array mit numerischen Werten.
' Sinnloserweise wird als Summanden einfach zweimal
' das Argument value verwendet
Dim aArgumente(1) As Variant
aArgumente(0) = value
aArgumente(1) = value
' Aufruf der SUM-Funktion mit Übergabe des Arrays
' mit den Werten die zu addieren sind
funktionAufrufen = oFunktion.callFunction( "SUM", aArgumente() )
End Function
Für SUMME() geht das auch.
Für TAGEIMMONAT() geht es mit deutschsprachigen Versionen von OOo offensichtlich nicht:
http://www.oooforum.org/forum/viewtopic ... tionaccess
Was ich wirklich brauche, sind Datumsfunktionen in Basic.
Ja, die gibt es doch, siehe Online-Hilfe.

Es wäre nun eigentlich kein Problem eine TAGEIMMONAT-Funktion in Basic zu erstellen (--> wandele das Datum in serielle Zahl, verringere die in einer Schleife schrittweise um 1 und prüfe wann sich der Monat ändert, zähle dann wieder in einser Schritten hoch bis sich der Monat erneut ändert und die Anzahl der letzteren Schleifendurchläufe entsprechen den gesuchten Tagen) ich stoße nur gerade im Forum auf eine andere Lösung, also nimm die dann brauche ich nicht soviel nachdenken:
http://www.oooforum.org/forum/viewtopic ... =leap+year

Code: Alles auswählen

...
Select Case Month( startDate ) 
      case 1 
         numberOfDays = 31 
      case 2           
         If startYear mod 400 = 0 Then 
            numberOfDays = 29 
         Elseif startYear mod 100 = 0 Then 
            numberOfDays = 28 
         Elseif startYear mod 4 = 0 Then 
            numberOfDays = 29 
         Else 
            numberOfDays = 28 
         End If 
      case 3 
         numberOfDays = 31 
      case 4 
         numberOfDays = 30 
      case 5 
         numberOfDays = 31 
      case 6 
         numberOfDays = 30 
      case 7 
         numberOfDays = 31 
      case 8 
         numberOfDays = 31 
      case 9 
         numberOfDays = 30 
      case 10 
         numberOfDays = 31 
      case 11 
         numberOfDays = 30 
      case 12 
         numberOfDays = 31 
   End Select 
...
kann man sich die ZellenID geben lassen?
Sprich pos. 0,0 zu "A1"

mit Zellformel so:

=WECHSELN(ADRESSE(1;1);"$";"")
(1;1 entspricht 0;0)

in Basic so:

Code: Alles auswählen

Function GetAddress (x, y As INTEGER) 
  Dim nb,i As Integer 
  Dim AdrStr As String 

   AdrStr = "" 

  nb= (x+1) / 26 

   if ( nb >= 1 ) then 
     AdrStr = Chr(64 + Fix(nb)) 
   end if 
    
  AdrStr = AdrStr+Chr((x mod 26)+65) 
  AdrStr = AdrStr+Cstr(y+1) 
  GetAddress=AdrStr 
End Function



Gruß
Stephan
kann_nix
Beiträge: 4
Registriert: Di, 16.08.2005 21:40

Beitrag von kann_nix »

puhh, wat busy...
Jetzt bin ich endlich wieder zu Hause.

Vielen dank für die grossartige Hilfe

Für die internen Funktionen habe ich excompat
http://www.teamstaroffice.org/download/ ... ompat.html
gefunden

so kann mann ganz einfach einen Datumsbereich nach anzahl der Tage auflisten

Code: Alles auswählen

=starCalc("Date", 04, 1, 55)
ergibt z.B. 24.02.04
-- sehr gail --

Was ich mache?
Ich Arbeite in einem Lager einer Messebau Firma mit Mietservice
und entwickle eine Datenbank mit OO.
Das heist, es gibt einen Bestand und Projekte mit Buchungen.
Auf Knopfdruck soll OO-calc nun die verfügbarkeiten für die nächsten drei Monate berechnen.
Ein erster versuch, ob das mit OO überhaupt geht, war ein durchschlagender Erfolg.
Mein Kollege: "Das bringt uns richtig nach vorne...". :D

Noch eine Frage:
Ich möchte z.B. die Tabelle Bestand als Frame einfügen.
Wie erreiche ich diesen Frame mit Basic?
Antworten