LibreOffice (OpenOffice) で python を使ってマクロを書く
マクロのファイルは次のディレクトリ以下に.pyファイルを用意する(windows)。
C:\Users\ユーザ名\AppData\Roaming\LibreOffice\4\user\Scripts\python
ポータブル版では
Data/settings/user/Scripts/python
基本的に、勝手に定義されるグローバル変数 XSCRIPTCONTEXT から getDesktop() や getDocument() を呼び出して色々やってりゃいい感じ。
uno についてはよくわからない。
関数が1つのマクロの単位なので、公開するマクロ(関数)を制限したいときにはスクリプトの最後に g_exportedScripts 変数を定義して、公開する関数名をタプルで列挙する。
設定など
JavaなしでLibreOfficeを使う方法: 山賀正人のブログ
Javaがないとメッセージがいちいちうるさいので、ポータブル版は App\libreoffice\share\extensions 以下の nlpsolver と wiki-publisher をどこかにでも待避させておこう。
オプションのセキュリティからマクロセキュリティを「中」にしておく。これをしなくてもpythonマクロは使えるが、シート埋め込みのマクロを使いたいため。
参考資料
- LibreOffice: Namespace List
- とりあえずここでメソッド名などを検索して使い方を見てる。
- OpenOffice/LibreOffice マクロ
- APIについて調べるときはここ
参考資料(テクニックについて)
以下の記事を参考にセルアクセスを、配列にして効率化した。
- (OpenOffice Basic)Calcでセルの取得と値の取得・設定 : 3流プログラマのメモ書き
- (OpenOffice Basic)Calcでセルアクセスの高速化 : 3流プログラマのメモ書き
- [OpenOffice Basic] シートへの高速なアクセス
- OOoBasic/Calc/merge - ...?
- 結合されたセルの値を取得する参考