Linux 版の LibreOffice Calc で ExcelLikeUno を使う

結論から言うと、ちょっとトリッキーな設定が必要ですが、できます。

Linux 版といっても色々あるので、詳しい検証は後からになるのですが、ひとまず自分の環境である Ubuntus 24.04 の LibreOffice のダウンロード版(snap版じゃないほう)で通りました。

LibreOffice のインストール

sudo apt install libreoffice
sudo apt install python3-uno

作業環境を Windows/Linux/macOS のどれに寄せるのかは、たびたび議論になるところでしょうが、要は “自分のところで動けばいい” ってのが優先させます。あと、仕事で使うので “客先の環境で動かないといけない” ってのがありますね。

Ubuntu 24.04 の制限

それ以前の環境と Python の使い方が変わっているので、注意が必要です。

  • ダウンロード版の LibreOffice には Python が含まれない。このために OS 側の Python を使う
  • OS 側の Python はセキュリティ上 pip ができない。

という訳で一気に詰み…というわけでもなく、ローカルスクリプトのほうに pip できたり、LibreOffice が使う Python を指定したりできればいいのですが…後者の LibreOffice が使う Python のほうはそういう設定がありません(たぶん)。

ちなみに、うちの Ubuntu はこんな劣悪な環境で動いています。Hyper-V でもいいのだけど、ちょっと mini pc が余ってしまったので、練習用に。

LibreOffice 関係のパス

LibreOffice の python マクロのパス(古いのだと LibreOffice のように大文字になっていますが、最新版は libreoffice のように小文字です)

~/.config/libreoffice/4/user/Scripts/python

Python3 の site-packages のパス

/usr/lib/python3/dist-packages

要は、OS で使っている python3 の site-packages/dist-packages に pip のライブラリを突っ込めばいいのです。どうせ、自分だけの環境(あるいは客先だけの環境)なのですから、セキュリティ関連は自前もちということで。

なので、

  • python3 -m venv .venv で 仮想開発環境を作成する。
  • .venv 環境内で pip install exellikeuno する
  • .venv/lib/python3.12/site-packages 内に excellikeuno がインストールされる
  • .venv/lib/python3.12/site-packages/exellikeuno を /usr/lib/python3/dist-packages 内に sudo でシンボリックリンク(ln -s)する

という方式です。フォルダ名を ~/libre にしていますが、これは適当に作って大丈夫です。

mkdir libre
cd libre
python -m venv .venv
.venv/bin/pip install exellikeuno
ls .venv/lib/python3.12/site-packages
sudo ~/libre/.venv/lib/python3.12/site-packages/excellikeuno /usr/lib/python3/dist-packages/

のような感じで動かします。最後だけ sudo なので注意してください。

リモート vscode で python マクロを編集する

Ubuntu 上で vscode で編集すればよいのですが、私の場合はメイン環境が Windows なので Windows から Ubuntu へ vscode でリモート接続します。

モジュールとかのコード補完が効くように .vscode/settings.json も設定しておきます。

{
    "python.analysis.autoImportCompletions": true,
    "python.analysis.extraPaths": [
        "~/.config/libreoffice/4/user/Scripts/python/excellikeuno",
    ]
}

ExcelLikeUno 関係のコード補完は pip でインストールしてあるので、自動で補完されます。

Calc のマクロで動かす場合はこんな感じ。

マクロが Basic なのか Python なのかは、自動判別してくれます(これ、Windows 版が自動判別じゃないのがおかしいw)

LibreOffice Calc の外部から起動したい場合は、サーバーを起動します。

soffice --accept="socket,host=localhost,port=2002;urp;" --norestore --nologo

OS 付属の Python3 を動かせば ok です。

python3 calc_sample_shogiban.py

まあ、UI を使う場合は Ubuntu の Python の制限もあり、ややこしいことになっていますが、Docker や WSL のヘッドレス(GUI がないモード)の場合はもうちょっとやりやすいはずです。LibreOffice を使って PDF 化したり整形するようなサーバー処理を作りたい場合は、Docker のほうが便利だと思うので、これを後ほど試します。

カテゴリー: 開発, LibreOffice パーマリンク