OpenOffice.org Basic > OpenOffice.org Calc Basic
----
OpenOffice.org 表計算ソフト Calc での Basic を使ったマクロの解説。
予約語 'Function' を用いて定義した関数は、ワークシート内で数式関数としても利用可能である。
このため、下記の様に、マクロで関数を定義した場合、ワークシート内では '=SUM(A1:F1)' などと同様、
'=HelloWorld()' などとして利用できる。
Function HelloWorld ()
	print "Hello World!"
End Function
引数は、数値、文字列、単体セル、範囲などの形式で与えることができる。
'=foo(12)' では数値、
'=foo("Hello")' では文字列、
'=foo(A1)'では、セルA1 の値、
'=foo(A1:F1)'では、A1からF1までの各セルの値からなる2次元の配列が渡される。
これを表にまとめると、以下のようになる。
シート内で、'=foo(12)' などとして数値を受け取ると、
関数定義での引数の型指定を省いた場合、'Double' として扱われる。
また、'Long'、'Integer' など、引数に対する型宣言を伴った関数定義をした場合には、宣言通りの型として値が受け渡される。
シート内で、'=foo("文字列")' などとして値を受け取ると、
関数定義での引数の型指定を省いた場合、'String' として扱われる。
シート内で、'=foo(A1)'などとして値を受け取ると、
関数定義での引数の型指定を省いた場合、
セルA1の値が数値であれば 'Double'、文字列であれば 'String' として受け渡される。
また、Long や Integer など、型指定をした上での受け取りも可能である。
シート内で、'=foo(A1:F1)' などと、範囲を指定する場合、
範囲内のセルの値が展開され、1からの数を添字とする2次元配列として受け渡される (OpenOffice.org 1.1.3)。
このため、範囲 'A1:F2' は2行6列の配列となり、
セル'A1'の値は、配列(1, 1)へ、セル'F2'の値は、配列(2, 6)に格納される。
下記に、'=foo(A1:F1)' などとして使用し、各セルの値を出力するプログラムを記載する。
FUNCTION Foo(C)
	DIM rows AS LONG
	DIM cols AS LONG
	DIM i AS LONG, j AS LONG
	rows = UBound(C(), 1)
	cols = UBound(C(), 2)
	FOR i = 1 TO rows
		FOR j = 1 TO cols
			PRINT C(i, j)
		NEXT j
	NEXT i
END FUNCTION
getCellByPosition(x, y) または getCellRangeByName("aCellName") を用いることが出来る。
Dim Sheet As Object
Sheet  = ThisComponent.Sheets(0)
Sheet.getCellByPosition(0, 0).String = "文字列"
Sheet.getCellRangeByName("A1").Value = 3.14
OpenOffice.org APIリファレンス
[http://api.openoffice.org/docs/common/ref/com/sun/star/text/XTextTable.html getCellByName]
[http://api.openoffice.org/docs/common/ref/com/sun/star/table/XCellRange.html getCellByPosition]