2013年5月20日月曜日

LibOのSDKの中のcppサンプルをコンパイル

Ubuntu12.04でLibOのSDK内のcppサンプルをコンパイルしてみたのでメモ。
(LibOとか、build-essentialとか、JDKとか、zipとかはインスコ済み)


1. SDKのインスコ(2個目のやつはサンプルが入ってるパッケージ。)
sudo aptitude install  libreoffice-dev  libreoffice-dev-doc
2. パッケージは、/usr/lib/libreoffice/sdk/に展開されるので、そこで、なんか環境変数設定用のスクリプトを実行。
cd /usr/lib/libreoffice/sdk/
./setsdkenv_unix
3. サンプルソースがあるディレクトリで、コンパイル実行。boost/unordered_mapなんかねぇぞコラってエラー。
cd /usr/lib/libreoffice/sdk/examples/cpp/complextoolbarcontrols/
make
4. build-essentialだけだと、C++ライブラリが足りなかったぽいので、追加して、再コンパイル。
sudo aptitude install libboost-all-dev
make clean
make

そうすると、/hmoe/tani/libreoffice3.5_sdk/LINUXexample.out/bin/ 以下にoxtファイルが出来上がってるので、LibOにインスコ。以下みたいな感じ。


なお作ったサンプルoxtを、Windows版LibOに入れると、ツールバーは出てくるけど、動いてないっぽい感じ。そらそーか。

2013年5月9日木曜日

Bitmap画像をLibO Calcのセルの背景色で表現するマクロ

BMPの仕様をちゃんと調べたり、座標合わせたりすんのが、結構大変だったのでメモ。
UbuntuのLibreOffice Calcで動作確認してます。
利用する画像は、あらかじめGIMPとかで、サイズを50 * 50ピクセルに拡大・縮小し、24ビットのBMP画像として保存しておきます。

Sub Main
  oSheet = ThisComponent.getSheets().getByName("Sheet1")
 
  ' セルのサイズ調整
  For i = 0 To 49
    oSheet.getColumns().getByIndex(i).Width = 500
    For j = 0 To 49
      oSheet.getRows().getByIndex(j).Height = 500
    Next j
  Next i
 
  ' bmpファイルの読み込み
  sURL = ConvertToURL("/home/tani/デスクトップ/testbmp.bmp")
  Dim buf(FileLen(sURL) - 1) As Byte
  Open sURL For Binary As #1
  Get #1, , buf
  Close #1
 
  ' RGBデータをセルの背景色に設定
  For i = 0 To 49
    counter = counter + 2
    For j = 0 To 49
      oCell = oSheet.getCellByPosition(49 - j, i)
      r = buf(Ubound(buf) - counter)
      counter = counter + 1
      g = buf(Ubound(buf) - counter)
      counter = counter + 1
      b = buf(Ubound(buf) - counter)
      counter = counter + 1
      oCell.CellBackColor = rgb(r, g, b)
    Next j
  Next i
End Sub
実行すると、こんな感じ。


2013年4月17日水曜日

LibO Basicでフォルダ内の全ファイルを再帰的に取得

Excel VBAだとサンプルがすぐ見つかるけど(Excel2003と2010で非互換があるので要注意)、LibreOfficeのサンプルが簡単には見つからなかったので。

こんな感じ。


Function SearchFileMain As Boolean 
  SearchFileMain = false
  sTargetURL = ConvertToURL("C:\tmp")
  Dim aFileURL(0)
  SearchFileRepeat(sTargetURL, aFileURL)
  MsgBox "配列にファイルリストを格納しました。"
  SearchFileMain = true
End Function

' 対象ファイルの再帰検索
Sub SearchFileRepeat(sDirURL As String, ByRef aFileURL)
  oSFA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  aFC = oSFA.getFolderContents(sDirURL, true)

  For i = Lbound(aFC) To Ubound(aFC)
    item = aFC(i)
    If oSFA.IsFolder(item) Then
      SearchFileRepeat(item, aFileURL)
    Else
      j = Ubound(aFileURL)
      If j = 0 And IsEmpty(aFileURL(0)) Then
        aFileURL(0) = item
      Else
        Redim preserve aFileURL(j + 1)
        aFileURL(j + 1) = item
      End If
    End If
  Next i
End Sub