*目次 [#m12ffc39] #contents *趣旨 [#l737426e] VBAをOpenOffice.org Basicに移植する際の留意点というか、ルールをまとめる。 修正量を最小限にするための工夫を中心に書く。 *OpenOffice.org Basicマクロリファレンス [#ad9fec54] http://itref.fc2web.com/openoffice/basic/index.html *現在表示中のシートオブジェクトを取得する [#ka047662] Dim ash As Worksheet Set ash = ActiveSheet を下記のように書く Dim ash As Object Set ash = ThisComponent.CurrentController.ActiveSheet *セルへの値 [#o7ff2dd9] OpenOfficeは0始まりで、行と列番号が逆という、センスゼロな実装のため さらに、文字列の取得と数値の取得のメソッドが異なり、 valueメソッドでは数値しか取得できない。文字列を取得しようとすると0になるのだ。 文字列で取得したい場合はvalueメソッドではなくStringメソッドを使う。 なるべくVBA側もセルにアクセスするgetter,setterを下記のようにメソッドを用意して実装しておけば、OpenOffice用のメソッドに置き換えるだけで移植が可能になる。 **VBAでのセル値取得メソッド [#l2ba7051] Function cel(sh As Worksheet, row, col) As String cel = sh.Cells(row, col).Value End Function **OpenOffice側でのセル値取得メソッド 数値版[#sa61c08a] Function cel(sh As Worksheet, row, col) As String cel = sh.Cells(row, col).Value End Function **OpenOffice側でのセル値取得メソッド 文字列版 [#s23e1a91] Function getString(sh As Object, row, col) As String getString = sh.getCellByPosition(col -1, row-1).String End Function *Debug.printのかわりにどーするか [#x6031151] Printメソッドを使うと、一回一回ダイアログが出てくるのでめんどくさい。 なので、下記の実装を行うことを自分のルールとする **Debug.Print代替コード [#b1d9daee] Debug.printのスコープってグローバル変数扱いでよいと思う Mainメソッドから実行がスタートする使用っぽいのでそこに、Debug.printのいろいろをまとめておく。 'グローバル変数として宣言 Dim DebugPrint as String Sub MAIN '初期化 DebugPrint = "" '任意のメソッドを呼び出す。 GeneGene 'デバック出力 'ExportData "c:\OpenOfficeDebugPring.txt",DebugPrint p END Sub **もともとあった、Debug.printをDebug_printに置き換えて移植する [#q6d1404d] Sub Debug_Print(buf as string) If DebugPrint <> "" then DebugPrint = DebugPrint & vbCrLf End if DebugPrint = DebugPrint & buf End Sub 'ファイルに文字列を出力します。 Sub ExportData (finename, s) Dim FA As Object Dim O As Object Dim OS As Object FA = createUnoService("com.sun.star.ucb.SimpleFileAccess") O = createUnoService("com.sun.star.io.TextOutputStream") OS = FA.openFileWrite(finename) O.setOutputStream(OS) O.writeString(s) O.closeOutput() End Sub デバック出力するからには、確認するために出力するわけで、単にファイルに吐き出すだけだと、 いちいちファイルを開く作業が発生するし、確認するためのコードは簡単に呼び出したい。 というわけでデバックに関してはp一文字のメソッドを用意することにする。 Sub p() 'デバック出力 ExportData "c:\OpenOfficeDebugPring.txt",DebugPrint '//Shell参考 '//http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Other_Functions_(Runtime_Library) Shell("C:\Program Files\sakura\sakura.exe", 1,"c:\OpenOfficeDebugPring.txt" ) End sub ***参考 [#xcdf5647] http://programamemo2.blogspot.com/2007/12/openoffice.html *改行コード [#s5835f34] 関数で用意しておく Function vbCrLf() as String vbCrLf = CHR(10) End Function