UbuntuのLibreOffice(MS Office互換性あり)でPythonマクロを使用する方法（超初級者向け）

Libreofficeバンドルのpythonにpipをインストールする方法が記載されたHPを見つけました。
ただし、Windows10用です。(ubuntuはapt installでインストールするのでできません。)

Python環境としてのLibreOfficeをより便利に使うために (2018-03-23)
https://www.fixedpoint.jp/2018/03/23/libo-as-a-python-environment.html

-------------------------------------
(最新のVerはだいぶMS Office互換性が良くなっているらしい)

ネット上にやり方の記事が沢山ありますが、誰でもわかるように書きたいと思います。

Ubuntuに最初からインストールされている（または、Ubuntuソフトウェア・「apt install」等でインストールした）LibreOfficeはマクロの言語はBasicしか使用出来ません。

LibreOfficeSDKをインストールすると、JavaScript・Beanshell・Pythonが使用できるようになります。

libreoffice-dev、libreoffice-dev-common
の説明にSDKと書かれているので、SDKだけでもインストール出来るかも知れません。あまり詳しくないので本当に可能か私にはわかりません。もし可能なら
$ apt install libreoffice-dev libreoffice-dev-common
でインストール出来ますが、ネットで確認してください。

~~Ubuntuに最初からインストールされているLibreOfficeにSDKだけをインストールしようとしましたが、同じVerのSDKでもエラーが出てインストール出来ませんでした。（インストールのやり方が違う為かも知れません。）~~

そのために、別に最新のVerをインストールしました。（現在Ver5.4.3とVer6.0.0のLibreOfficeをインストールしています。）

まず、LibreOfficeのダウンロードサイト
最新版 https://ja.libreoffice.org/download/libreoffice/
安定版 https://ja.libreoffice.org/download/libreoffice-stable/
からメインインストーラー・日本語訳インターフェース・(Download the)SDKをダウンロードします。

解凍方法は、私はファイルマネージャーで右クリック　ー＞　ここで展開(H)　でやっています。
ターミナル（端末）で行う方法は、ネットで検索すれば沢山ヒットします。

インストール方法
解凍したフォルダの中にDEBSフォルダがあるので、それを開きます。
ファイルマネージャーのファイル・フォルダ以外の所で右クリック　ー＞　Open Terminal Here　で端末が起動します。（Ubuntu Studio 17.10を使用しているので、Ubuntuだと違う可能性があります。）
(READMEに記載している方法の場合)

`$ sudo dpkg -i *.deb`

sudoは（Windowsで言うとアドミニストレータ[管理者権限]）スーパーユーザーで実行すると言うことです。Ubuntuではよく使いますがシステムを破壊することも出来るので非常に注意が必要です。

*.debは全てのdebファイル（１つでも良い）にdpkgコマンドを-iスイッチ付きで実行すると言うことです。

これを、メインインストーラー・日本語訳インターフェース・(Download the)SDKの3回行います。

次に、JAVA JREが必要ですので、インストールしていない場合はインストールします。
私は、以下のサイトを参考に行いました。（インストールして端末に表示されるものが少し違いましたが問題なくインストールされました。）
#Ubuntu にOracle Java 8 (PPA)をインストールする(ubuntu)
https://qiita.com/TsutomuNakamura/items/f12fdf0a8502e634584d

次に、Pythonのプログラム（スクリプト？）を保存するフォルダを作成します。
ファイルマネージャーで/home/ユーザー名/を表示します。

隠しフォルダが表示されていないので、表示　ー＞　隠しファイルを表示(H)　で隠しファイル・フォルダが表示されます。（Ubuntu Studioですので、Ubuntuの場合少し違うかも知れません。）
作業が終わったら、隠しファイルを表示のチェックを外しておきます。

.config　ー＞　libreoffice　ー＞　4 (LibreOffice 6.0までの場合)　ー＞　user　ー＞　Scripts　ー＞　に移動します。
多分ここにはフォルダは無いと思います。
「python」フォルダを作成します。ー＞　「python」フォルダに移動します。ー＞　ここに*.py(プログラムファイルを保存します。)
/home/ユーザ名/.config/libreoffice/4/user/Scripts/python/　(Ubuntuの場合)
C:\Users\ユーザ名\AppData\Roaming\LibreOffice\4\user\Scripts\python　(Windowsの場合)
私は、シンボリックリンクをここに置いています。(Ubuntu Studioは簡単に作成出来ます。Ubuntuはどうかわかりません。）

Ubuntu Studioのシンボリックリンク（Windowsのショートカットのようなもので作り方はWindowsと同じです。）の作り方。
○○○.pyファイルを作成します。　ー＞　ファイルマネージャーで右クリック　ー＞　送る　ー＞　デスクトップ（リンクを作成）　ー＞　デスクトップにショートカット見たいなアイコンに矢印が付いたシンボリックリンクが作成されているので、上記の/home/ユーザ名/.config/libreoffice/4/user/Scripts/python/に移動（切り取り　ー＞　貼り付け）します。

これで、元ファイルとシンボリックリンクの両方で編集出来ます。

#注意
LibreOfficeには、Python用のIDE（LibreOfficeBasicのエディタのようなもの）は付属していないので、プログラムコード作成用のIDEをインストールした方が良いらしいです。

いろいろな種類がありますが、ネットで検索するとPyCharm（無料のものもある）が良いらしいので、私はこれをインストールしました。
最初は使い方が難しかった。ネットで検索すれば使い方のブログ等が見つかります。
別にインストールしないで、テキストエディタで作成することも出来ます。（しかし、これではデバッグが難しいです。私は、まだデバッガーの使い方を知らないので同じです。）
（Ubuntuでは関係ないですが、テキストエディタとしてWindowsのメモ帳を使用してはいけないそうです。
OpenOfficeは LF改行 のファイルしか受け付けない (※ OOo scripting framework and python の "Script coding" を参照)。したがって改行コー ドは、 必ず LF で保存すること。 Pythonマクロの編集にwindowsのメモ帳 を使ってはいけません。 メモ帳で保存してしまうと、改行コードが CR+LF になってしまうので注意！）

PyCharmの場合、/home/ユーザ名/フォルダにプログラムを保存するフォルダが作成されます。（ここからシンボリックリンクを貼ると良い）

LibreOfficeのサンプルマクロは/opt/libreoffice<Ver番号>/share/Scripts/pythonに保存されています。(Ubuntuの場合)
C:\Program Files\LibreOffice 5\share\Scripts\python　　(Windowsの場合)

#注意
LibreOfficeバンドルのPythonはUbuntuに最初から入っているPythonに比べてパッケージが少ないので、UbuntuのPythonで動作するプログラムでもLibreOfficeバンドルのPythonではエラーがでる場合があります。

LibreOfficeバンドルのPythonにUbuntu - Pythonのパッケージのパスを追加する
https://qiita.com/ty21ky/items/3b944a7abe23e3bcaf8f
を行うと、全てではありませんが、UbuntuのPythonのパッケージを利用することが出来ます。

この場合、UbuntuのPythonとLibreOfficeバンドルのPythonのbit数を合わす必要があります。
最近のUbuntu、LibreOfficeの場合、両方共64bit版が入っています。

もし、確認する場合は、
UbuntuのPythonが何bit版か調べる方法
https://qiita.com/ty21ky/items/b4da2d9cb55c2dd2bc0d
で確認することが出来ます。

#サンプルプログラムを実行する方法
#####例
LibreOffice Calc・Writer等で新規作成します。
Writerの場合
ツール　ー＞　マクロ(M)　ー＞　マクロを実行(U)　ー＞　マクロセレクター　ダイアログが表示　ー＞　ライブラリ　ー＞　LibreOfficeのマクロ　の▶をクリック　ー＞　沢山マクロが表示されます。　ー＞　HelloWorldをクリック　ー＞　マクロ名 HelloWorldPython　をクリック　ー＞　実行ボタンをクリック

Writerに「Hello World (in Python)」が表示されます。

#Pythonプログラムを自作する時の注意

LibreOfficeバンドルのPythonとUbuntuのPythonでは文法は同じですが、LibreOfficeバンドルのPython用の書き方をする必要があります。また、LibreOfficeバンドルのPython専用の命令？（と言うのかな？）があります。

ネット上にサンプルプログラムがワンサカあります。
ただし、Pythonの決まった書き方があります。私は、これにハマって1週間程度悩みました。
例（ネットで拾って来たサンプルプログラム）
私が一番最初にネットで見つけた簡単なプログラム（プログラム自体は間違っていないが、あるものが足りなかった）
この場合、マクロ名の所が空白で何も表示されません。（また、プログラムにエラーがあっても表示されないときがあります。）

Calcで新規作成して、A1に５を入力、B1に１０を入力して
ライブラリ - sample-1 、マクロ名 - sample を選択して実行をクリックするとC1に１５が表示されます。

```python:sample-1.py
# -*- coding: utf-8 -*-

def sample():
doc = XSCRIPTCONTEXT.getDocument()

# シートを選択
sheet = doc.getSheets().getByName('Sheet1')

# C1 = A1 + B1
A1 = sheet.getCellRangeByName('A1')
B1 = sheet.getCellRangeByName('B1')
C1 = sheet.getCellRangeByName('C1')
C1.Value = A1.Value + B1.Value
```

上のプログラムではマクロ名に何も表示されません。
下と比べると、def sample():以降の行に半角スペースがありません。また、半角スペースの数も同じでないといけません。

正しいプログラム

```python:sample.py
# -*- coding: utf-8 -*-

def sample():
  doc = XSCRIPTCONTEXT.getDocument()

  # シートを選択
  sheet = doc.getSheets().getByName('Sheet1')

  # C1 = A1 + B1
  A1 = sheet.getCellRangeByName('A1')
  B1 = sheet.getCellRangeByName('B1')
  C1 = sheet.getCellRangeByName('C1')
  C1.Value = A1.Value + B1.Value
```

![MacroSelecter.png](https://qiita-image-store.s3.amazonaws.com/0/238800/ff9046b4-c68e-a111-ff9a-78ca250ac9b7.png)
ツール　ー＞　マクロ　ー＞　マクロを実行　とすると上のマクロセレクターが開きます。
ライブラリの方は、Sample.pyのSampleだけが表示されます。
マクロ名の方は、上記のプログラムのdef sample():のsampleの部分が表示されます。（イメージのマクロ名とは異なります。）

字下げの位置が１つでも違ったり、字下げが無かったり、プログラムにエラーがあったりしたら、マクロ名の所は空白で何も表示されないことが多いです。
この場合、プログラムを見直したり、空白が全角になっていないか、位置がずれていないか等をして修正したら表示されます。

def 関数名():　　＜メソッドと言うかも知れません？？＞
がなくても、マクロ名は表示されません。

UbnntuのPythonは、def 関数名():がなくても実行出来ます。


半角スペースの代わりにTabキーも使用しないほうが良いらしいです。

def sample():
　doc = XSCRIPTCONTEXT.getDocument()
docの前にスペースがあります。
これを字下げ（インデント）と言います。

後は、ネットにpythonの勉強になるサイトが沢山あるので勉強してください。

参考
LibreOffice(7)Pythonマクロ独習の資料を集める
https://p--q.blogspot.jp/2014/01/libreoffice7python.html