OpenOffice 3.2 のマクロを触る機会ができました。
OpenOffice は Basic のほかに、PythonやJavaScript,Bean Shellも使えるようですが、OpenOffice Basic が一番情報があるので、それを使うことにしました。
しばらくは OpenOffice マクロの話となります。
とりあえず、Excel で作られたマクロ付きを OpenOffice Calc に変換する作業をすることに。。
SunというかOracle公式の OpenOfficeBasic マニュアルがあるのでそれを参考にしました。(正確にはStarOfficeのマニュアルですが)
下記サイトで見れませす。
StarSuite 7 Office Suite - Basic プログラマ向けガイド
VBAとの互換は、あまりないようです。
ここによると、先頭に下記宣言を付けるとVBA互換になるけど、やはり完璧じゃありません。(途中でクラッシュしたりします。)
Option VBAsupport 1
また、関数名に日本語使えないようです。(普通プログラマの観点からするとそんなことはしませんが、移植元のExcel VBAはどうも素人さんが作ったらしく日本語関数名使いまくりでした。)
まずは、Calcでのシートの選択方法です。基本 OpenOffice ではシートやセル等は全て Object 変数で表すようです。
Dim oSheet As Object//インデックスで選択
oSheet = ThisComponent.Sheets(0)
//シート名で選択
oSheet = ThisComponent.getByName.Sheets.("aaa")
Dim Doc as object
Doc = StarDesktop.CurrentComponent
oSheet = Doc.Sheets.getByName("Sheet")
OpenOffice IDEから実行するときは、ThisComponentからしないとダメなようです。
また、アクティブなシートの取得はVBAだと ActiveSheet オブジェクトからできますが、OpenOffice だと下記のようにしないといけません。
oSheet = ThisComponent.CurrentController.ActiveSheet
参考:
AddinBox/VBAユーザーの為のOpenOffice.org 備忘録:ThisWorkbook, ActiveWorkbook, ブック名での参照 ThisComponent と StarDesktop.CurrentComponent の違いがまとめられてます。