ScriptForge Calc Demoを動かす

[LibreOffice Advent Calendar 2021](https://adventar.org/calendars/6425)　12月3日の記事です。
昨日は[TDFのBoard of Directorsって何？概要と選挙について - Shinji Enoki's blog
](https://eno.hatenablog.com/entry/2021/12/03/160753)でした。

LibreOffice Conference 2021で気になるものを見つけた。

https://www.youtube.com/watch?v=pHlLdyJz2sE

LibreOfficeでPythonを使ってマクロを書ける。
それもUnoとかBasicのややこしい記述を使わずに。
素晴らしい。

サンプルの資料もGitHubに公開されている。
Youtubeの動画通りに動かしてみようと思う。

## 環境

- LibreOffice Calc
- Windows10/11 Pro
- Git

下記の資料をGit Cloneしてくること。

https://github.com/rafaelhlima/LibOCon_2021_SFCalc

## やり方

### 発表資料を取得

GitHubに置いてあります。
Git Cloneで入手します。

``` ps1:git_clone
PS> git clone https://github.com/rafaelhlima/LibOCon_2021_SFCalc.git
```

Gitが分からない方は下記のように、
Code > Download Zip 

でZIPファイルで入手してください。
![gitdownload.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/1f7e2fb3-a50e-9e4d-48db-e76b495ecfee.jpeg)

Windowsなら右クリック[すべて展開」でZIPファイルを展開します。

### 動かない？

そのままでは動きません。
下記の3つの作業をする必要があります。

- マクロを低に
- LibOCon_2021.py をUser Scriptフォルダに置く
- インポートするcsvやodsファイルのパスを書き換える

### マクロを低に

いきなり取得したフォルダの中のSample_File.odsを開くと下記の警告が出る。

マクロのボタンを押しても全く動かない。

![macro.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/71f243c1-1555-b63f-0932-9ce0fafd714b.jpeg)

[ツール] > [オプション] > [LibreOffice] > [セキュリティ] 
![macro00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/d62eacca-e8e6-a530-c2c2-abc648f60c77.jpeg)

![macro01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/6dc5a808-708d-58c4-a8b1-d1cf18eb5719.jpeg)

現在のマクロセキュリティ設定を低にします。

低のスクショに張り替えること

![macro02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/a43104c8-db99-c944-0a88-b0dddf98d5e2.jpeg)



これでSample_File.odsは開くようになりました。

でも、ボタンを押しても下記のエラーがでて動かないんだけど…。

![UserScript00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/a0fe74ff-f694-f9aa-b9a9-3bde03a59cf2.jpeg)


### LibOCon_2021.pyをUser Scriptフォルダに置く

ReadMeを読んでみましょう。

```
the file LibOCon_2021.py needs to be placed into the LibreOffice user scripts folder in your machine.

On **Windows** machines, the folder is:(if it does not exist, create it)
`%APPDATA%\LibreOffice\4\user\Scripts\python`

```

要約すると

user script folderという場所に LibOCon_2021.pyを置く必要がある。
Windowsの場合は、
`%APPDATA%\LibreOffice\4\user\Scripts\python`

無い場合はフォルダを作って入れる。

上記のフォルダに資料のフォルダにあるLibOCon_2021.pyを入れた。

Excecute V1 ボタンでも押してみよう。

よし、動いたぞ！

### LoadCSV1 (default) ボタンでエラーが出る

LoadCSV1(default)ボタンを押すと下記のようなエラーが出ます。
Error DOCUMENTOPENERROR
赤線の部分を見ると、「ファイルが無い」と言ってますね。

FileNameがフルパスで指定されています。
/home/rafael/Documents/JobData_v1.csv

僕の環境ではこのファイルがある場所は、
C:\Users\yusuke\git\LibOCon_2021_FS_Calc\JobData_v1.csv

UserScriptフォルダにあるLibOCon_2021.pyを書き換えます。
実際のファイルのある場所を指定します。

![DOCUMENTOPENERROR.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/5a22c6ea-645c-a488-76a6-ccdeabb41598.jpeg)

下記の場所に行って

%APPDATA%\LibreOffice\4\user\Scripts\python

の 
LibOCon_2021.py　を開きます。

下記のように /home/rafael/Documents ところを一気に置換します。

![fullpath.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/54987121-7f94-006e-7426-1b01c6345eb9.jpeg)

置換が終わったら上書き保存します。

これでLoadCSV1のボタンも別のファイルの別のシートをコピーするボタンも全て動き出します。

### Formのボタンを探る

「ツール」 > 「フォーム」 > 「デザインモード」

でフォームのボタンを右クリックできる。

ボタンを右クリック > コントロールのプロパティ　を押すと、

実行時の部分にScriptForgeの関数が割り当てられている。

右側の[...]ボタンを押すと割り当てられたアクションが出てくる。

マクロのボタンを押すとマイマクロからLibOCon_2021.pyに書かれた関数を選ぶことができる。

### 全体像を図式化

大まかに下記のように動いていることが分かった。

```
LibreOffice -> ScriptForge -> Formボタン
```

取り合えず動かし方とどうやって動いているかは掴めたと思います。

## 今後の課題

Unoの読込をかなり簡素化してくれる。
ただ、下記のようなことは分からない。

- VBAのようにファイルの中に仕込む方法は？
- 拡張機能の中で使うにはどうする？

VBAのようにファイルの中に仕込むのは、
UbuntuのLibreOfficeならできるようだが、
Windowsだと黒い画面が一瞬出て消える。
多分、ASPOがWinodowsのエディタを指定できていないのかもしれない。

## 追加

ASPOのOptionsで好きなエディタを指定できるようになりました。

[ツール] > [機能拡張マネージャー] > [オプション]で指定できます。

![APSO.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/0b6fa6f9-45ea-5cfb-1a14-f625fef518a9.jpeg)

上記の図はWindowsの場合。

今はVBAのようにファイルの中に仕込むことができます。