LibreOfficeで決算分析をしようとして断念した経験談

Excel(エクセル)を使わずに、LibreOffice Calc(リブレオフィスカルク)で決算分析システムを作ろうと思って、最終的に断念した経験談です。

リブレオフィスは、OpenOffice(オープンオフィス)から派生したソフトですね。

なぜ、リブレオフィスを使おうかと思ったか?

当時は、Windows 10(ウィンドウズテン)への強制アップグレードが行われていた時期で、こんな強烈な対応を迫られるなら、分析環境だけでも仮想PCに切り出して、OSが変わっても大丈夫なようにしようって思い立ったんですね。

Linux Mint(リナックスミント)にPython(パイソン)とリブレオフィスを入れて、上場企業の決算分析用のマシンをVirtualBox(バーチャルボックス)の中に作ろうと、そう思ったわけです。

けど、リブレオフィスのマクロ開発が困難を極めて、結局断念しました。マクロというのは、LibreOffice Basic(リブレオフィスベーシック)のことです。

一応、マクロでやりたかったことは出来たんですが、マクロ開発の難しさやリブレの遅さ、オートフィルタの不便さなどで、本格的な運用は断念しました。

困難1 マクロの開発環境が総じて非効率でUNO APIも難しかった

Excel VBA(エクセルブイビーエー)の開発環境も10年以上変わってませんが、関数名の補完が効いたり、ほとんどの関数を網羅したヘルプがついてます。大文字小文字の自動整形も便利ですね。

時々、見た目のコードは正しいのに実行できない不具合とか、開発環境そのものが落ちるとか、数えきれない困難はありましたが、とりあえず作りたいものは作れました。

機能的には、選択中の証券コードから色々なデータを開く感じですね。

XBRLの数値データを開いてスクリーニングしたり、業績グラフを出したり、PDFを一括検索したり、株サイトや企業サイトをまとめて開いたりって感じです。

リブレのマクロは5倍難しい!

ひるがえって、リブレオフィスの困難はエクセルの5倍を行くものでした(体感)。

関数の補完が無いとか、ヘルプが見つからないとかって、開発に響くんですね。

あと、リブレのマクロは大文字小文字の区別が無いのですが、自動で統一してくれたりはしないんですね。けど、さすがに揃えないと見づらいですし、これも手作業で揃えてました。

補完もない、自動整形もないで、リブレのIDE(統合開発環境)は非常に開発効率が悪かったです。

マクロをエクスポートして外部編集

あまりにも開発が大変だったので、途中からマクロをエクスポートして、別のエディタで編集してからマクロをインポートする方法に変えました。しかしこれも大変だった。

エクスポートすると、アポストロフィーやダブルクオーテーションなどが『apos』や『quot』にエスケープされてしまうんですね。これは、外部で編集することは想定してないでしょうから、仕方のないところです。

Pythonのxml.sax.saxutils.unescape()で編集前にアンエスケープして、開発したらxml.sax.saxutils.escape()でエスケープし直してリブレにインポートする。

こんな感じで開発してました。今にして思うと、かえって面倒が増えて、手間は変わらなかったかも。でも好きなエディタで書けたのは楽でしたね。自前でコード補完も作れて、コーディングが少しだけ楽しくなりました。

それから、リブレのマクロで欠かせないのがUNO API(ウノエーピーアイ)です。ウノと読むのか、ユーエヌオーと読むのかは調べてないです。

UNO APIの把握は超絶大変

LibreOfficeのマクロでオートフィルタはどうやって操作すればいいんだ!?

LibreOfficeのマクロで新しいウィンドウを開くにはどうしたらいいんだ!?

リブレには専用のメソッドが用意されている機能と、UNO APIでしか操作できないと思われる機能があったんですが、このUNO APIがとにかく難しい!特に、ウィンドウ関係はUNO APIがメインになるのでさらに厳しい。

UNO APIは、createUnoService()やexecuteDispatch()に色々な引数(ひきすう)を渡すことで、様々な操作が出来るようになっていたんですが、『どんな引数を受け付けているのか?』これが分からなかったんですね。

あと、引数も配列で受け取る方式で、あらかじめ配列を作っておいて、使いたい値をセットして、それを渡すという、かなり汎用的(はんようてき)な作りになっていました。とにかく使い方が分からなかったです。

ヘルプを見つけるのにも苦労しました。『OpenOffice.org 3.2 BASIC Guide (ORACLE)』や『OpenOffice.org Macros Explained (Andrew Pitonyak)』を参考にして、頑張って作りました。 ものっそい時間がかかりました。

もし、VBAみたいにコード補完で定数(じょうすう・ていすう)が出てきたりしたなら、もう少し簡単だったかもしれませんね。メモ帳で開発してるみたいでした。デバッガのウォッチウィンドウも最低限の機能で、デバッグがめちゃめちゃ大変でした。

それでとりあえす、一応ですが、証券コードから色々なデータを開けるようにはなりました。

『おおー!リブレでも同じの出来たよ!』

決算分析の枠組みができたので、次はリブレのメニュー画面をカスタマイズしていきます。

困難2 メニューのツールバーをカスタマイズすると落ちる

『マクロを呼び出すためのボタン』を、メニューバーの下にあるツールバーに追加していったら、リブレが落ちました。

ツールバーのアイコン上で右クリックすると、『ツールバーをカスタマイズ(C)…』って出てきて、そこから好きなボタンを追加できるわけなんですが、これが3個、4個と追加していくうちに、ツールバーが消えて復活しなくなったり、リブレが落ちました。

とりあえず、リブレオフィスのポータブル版で開発してたのが幸いでした。

壊れたら直ぐに新しいのを用意できたので、そこはまあ、気楽に受け止めてたんですが、せっかく作ったマクロを便利に登録できないんじゃ、どうもならんと。で、なんとか使えないかと。

リブレオフィス、かなり良い線いってたんですよ。マクロ開発は超絶大変だったけど。だから、なんとかして使いたい!

とりあえず、ワークシートにフォームコントロールのボタンを置いて、そこにマクロを登録しました。

これでようやく画面の動作チェックに入れました。しかしです。

困難3 データが増えるとリブレが一気に重くなる

だいたい8列2000行くらい使うと、『Ctrl+矢印キー』での移動や『マウスホイール』でのスクロールがワンテンポ遅れてきました。

リブレのバージョンが上がるごとに徐々に改善されて来てはいるのですが、LiberOffice 6でもかなり苦しいです。列の追加や削除、コピー・貼り付けも10秒以上かかったりします。

エクセルなら、8列10000行でもセル操作が快適です。

この差がちょっと厳しかったです。決算分析に使うには苦しかったです。

困難4 オートフィルタが不便

あと、オートフィルタですね。オートフィルタを設定して、逆三角形のボタンを押したときに出てくるメニューなんですが、リブレは幅を広げられないんですよ。横スクロールバーも出ません。これがネックです。

長い表題などが見切れてしまって、フィルタ対象が見えなかったです。あと、カラーフィルタがありません。

LibreOffice Calcのオートフィルタは見切れてしまって、横スクロールもできない。幅を広げることもできない。

エクセルだと、フィルタメニューの幅を広げたり、セルの色で絞り込んだりできました。カラーフィルタ(色フィルタ)は、気になる銘柄に目印をつけて管理できたので、便利でした。

Excelのオートフィルタは、横スクロールバーでスクロールできるし、メニューの幅を広げることもできる。

細かいところではありますが、私はオートフィルタでの絞り込みを良く使うので、ここはまだエクセルだと思いました。

ただ、オートフィルタの速度に関しては、リブレはかなり改善されました。以前は逆三角形のボタンを押しても、上の画像のメニューが出せないくらい遅かったんですが、LibreOffice 6ではデータが増えてもメニューが開くようになっていました。

現状はエクセル一択

ExcelVBAの開発環境は良くできています。最終的にLibreOffice Basicでも同じようなことは出来ましたが、今後の機能追加の難しさから、またしばらくエクセルでやっていくことにしました。決算分析の効率化が目的なので、プログラミングはなるべく簡単なほうがいいです。

ここまでリブレオフィスの良くないところばかり挙げてきましたが、良いところもあります。

良い点1 ハイパーリンクがサクッと開く

これです。Excel上のハイパーリンクって、クリックした瞬間にさまざまなチェックが走ってから、ようやく開くんですよね。

自分で作った安全なリンクなのに、1秒くらい経ってからようやく開くんですよ。

一応、レジストリの ForceShellExecute でチェックを無効にすることもできるんですが、ハイパーリンクの挙動がいろいろ変ってしまうので、現実的に切ることができなかったです。

その点、LibreOfficeはリンクをシンプルに開くので、ウェブページでもローカルのPDFでもサクッ!と開きます。めっちゃ軽快です。

良い点2 再インストールが簡単

ポータブル版を使っていたので、起動しなくなってもすぐに新しいリブレを用意できました。これは良かったですね。ツールバーのカスタマイズでどうしようもないことになってましたが、最低限の設定をした状態でバックアップを取っていたので、やり直しが簡単でした。

良い点3 難しいマクロも列の書式設定くらいなら簡単

リブレのマクロが難しいといいましたが、開示情報リストの日付列を yyyy/mm/dd にしたり、列幅(れつはば)をそろえたり、金額を百万円単位 "#,###,," にしたり、そういった書式設定くらいなら難しくなかったです。

Pythonで作ったCSVのチェックに、書式設定の自動化マクロは便利でした。

LibreOffice Basicのコード例

セルの値を使って、FirefoxやChromeでWeb検索を実行するコード例です。

リブレやエクセルからブラウザを起動すると、凄く便利でした。セルをコピペしなくていいのは快適ですね。銘柄チェックがサクサク進みます。

ポイントは以下の2つです。

  • セルの値はどうやって取得するのか?
  • どうやってブラウザを起動するのか?

コードは簡単なので、おすすめです。

【LibreOffice Basic】セルの中身でブラウザ検索するコード例【Calc】

【LibreOffice Basic】複数のセル範囲でブラウザ検索するコード例【Calc】

Excelバージョンはこちらです。

【ExcelVBA】セルの中身でブラウザ検索するコード例【マクロ】

【ExcelVBA】複数のセル範囲でブラウザ検索するコード例【マクロ】

タイトルとURLをコピーしました