Top > OOoBasic > Generic > function

関数アクセス Edit

Calc で使用することのできる関数は Calc 上でなくても使用することができます。

サービス Edit

関数を使用するには com.sun.star.sheet.FunctionAccess サービスを使用します。

Sub FunctionAccess_1
Dim oFunctionAccess As Object, oProcessServiceManager As Object
  oFunctionAccess = CreateUnoService("com.sun.star.sheet.FunctionAccess")
End Sub

関数の呼び出し Edit

関数を呼び出すには, callFunction メソッドを使用します。

Sub FunctionAccess_2
Dim oFunctionAccess As Object
Dim aArgs(0) As Variant
Dim aResult As Variant
Dim sFunction As String
  oFunctionAccess = CreateUnoService( _
      "com.sun.star.sheet.FunctionAccess" )

  sFunction = "ARABIC"
  aArgs(0) = "mxiv"
  aResult = oFunctionAccess.callFunction( sFunction, aArgs() ) '--
  MsgBox aResult ' 1014
End Sub

"ARABIC" 関数を呼び出した結果, OpenOffice.org Calc の関数リストに例があるように "1014" と表示されます。 callFunction メソッドの最初の引数は,呼び出す関数名です。二番めの引数は,関数が取る引数です。引数を配列として順に渡します。 別の関数も使用してみます。次の関数 "SLOPE" は,XY の範囲の直線の傾きを求める関数です。この関数は,引数として Y と X の値を持つセル範囲をとります。

Sub FunctionAccess_3
Dim oFunctionAccess As Object
Dim aArgs(1) As Variant
Dim aResult As Variant
Dim sFunction As String
Dim oSheet As Object
Dim oXRange As Object, oYRange As Object
  oSheet = ThisComponent.getSheets().getByName( "Sheet1" )
  oYRange = oSheet.getCellRangeByName( "B4:B15" )
  oXRange = oSheet.getCellRangeByName( "A4:A15" )
  oFunctionAccess = CreateUnoService( _
      "com.sun.star.sheet.FunctionAccess" )

  sFunction = "SLOPE"
  aArgs(0) = oYRange
  aArgs(1) = oXRange
  aResult = oFunctionAccess.callFunction( sFunction, aArgs() )
  MsgBox aResult '
End Sub

シート内でこの関数を使用する際には "SLOPE(B4:B15;A4:A15)" のように範囲を指定しますが,callFunction メソッドで使用する際には,範囲の引数は com.sun.star.table.XCellRange で指定します。

その他の種類の引数 Edit

IDL リファレンスを参照すると、引数は long、double、long[][]、double[][]、string[][]、any[][]、css.table.XCellRange の型で指定できます。

シートの範囲を指定したくないときや、シートが実在しないときには次のようにします。

Dim vals(1, 1) As Long
 vals(0, 0) = 10
 vals(0, 1) = 1
 vals(1, 0) = 3
 vals(1, 1) = 2
 
 sFunction = "MIN"
 aArgs(0) = vals
 aResult = oFunctionAccess.callFunction( sFunction, aArgs() )
 MsgBox aResult '

まとめ Edit

methods
SbxEMPTY callFunction (
[in]string aName,
[in]seq<any> aArguments )
Calc の aName 関数を呼び出します。関数の引数は aArguments に指定します。

呼び出す関数のセル範囲などの引数は com.sun.star.table.XCellRange で指定します。

引数の数 Edit

引数の数はシートの列数が上限になっています。しかし、シート関数は複数列のセル範囲を引数にとることが出来るので、リファレンスにもあるように、次のようにして列数を超える引数を指定できます。

Sub FunctionAccessWithLargeArray
 Dim b(253) As Double
 Dim c(253) As Double
 For i = 0 to 253 step 1
   b(i) = i
   c(i) = i + 254
 Next
 a = Array(b, c)

 oFa = CreateUnoService("com.sun.star.sheet.FunctionAccess")
 r = oFa.callFunction("MAX", Array(a))
 msgbox r
End Sub

その他 Edit

Sub FunctionAccess_4
Dim oFunctionAccess As Object
Dim aArgs(2) As Variant
Dim aResult As Variant
Dim sFunction As String
  oFunctionAccess = CreateUnoService( _
      "com.sun.star.sheet.FunctionAccess" )

  sFunction = "SEARCH"
  aArgs(0) = "a.a" 'It is possible to use regular expression.
  aArgs(1) = "abrakadabura"
  aArgs(2) = 1
  aResult = oFunctionAccess.callFunction( sFunction, aArgs() )
  MsgBox aResult '
End Sub
Function FunctionResult( sFuncName As String, aArgs() As Variant ) As Variant
Dim oFunctionAccess As Object
  oFunctionAccess = CreateUnoService( _
      "com.sun.star.sheet.FunctionAccess" )
  FunctionResult = oFunctionAccess.callFunction( _
    sFuncName, aArgs() )
End Function

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes