Excel や Word 、 PowerPoint などの Office 製品を Git 管理する

## はじめに

社内でどうしても Office 製品のファイルを扱わないといけないとき、これを Git で変更管理できないだろうか？

というわけで、やってみました

https://github.com/RyoWakabayashi/office-examples

## 方針

どちらがよいか

- Office ファイルから必要な物をテキストでエクスポートして管理する
- バイナリのまま管理して、差分をツールで表示できるようにする

やはりバイナリはリポジトリーに入れたくないので、できれば前者が良いが、、、

毎回エクスポートする手間、もしくはエクスポートを pre-commit で自動化するための環境作り（を他人が実行できるようにすること）が大変そう

前者のためのツールを試してみましたが、長い期間更新されていないし、あまり使いやすくはない

必ずしもすべての情報がエクスポートできるわけでもなさそう

https://github.com/vbaidiot/Ariawase

ということで、今回は後者、差分をツールで表示する方針にしました

## 差分抽出ツール

今回は2種類のツールを利用しました

- マクロ中心のもの: [git-xl]
  - xlsm
  - xltm
  - xla
  - xlam

- マクロがないもの: [tika]
  - xls
  - xlsx
  - xlt
  - xltx
  - xlsb
  - doc
  - docx
  - ppt
  - pptx

マクロ付 Word や マクロ付 PowerPoint は使うことがないので入れていません

Access 等々はとりあえずどこかに置いておきます（私のローカル環境に入っていないので）

git-xl はマクロの差分を出してくれます

```bash
$ git diff
diff --xl a/examle_vba.xlsm b/examle_vba.xlsm
--- a/examle_vba.xlsm/VBA/Sheet1
+++ b/examle_vba.xlsm/VBA/Sheet1
@@ -1,7 +1,7 @@

 Public Sub Test()

-    MsgBox ("Good!!! Morning!!")
+    MsgBox ("Hellooooooooo!!")

 End Sub
```

tika は Excel や Word のテキスト差分をだしてくれます

```bash
$ git diff
diff --git a/example.xlsx b/example.xlsx
index 2d7a6a2..c660a22 100644
--- a/example.xlsx
+++ b/example.xlsx
@@ -1,7 +1,7 @@
 Sheet1
                表１ ヒョウ
                No.     行程 コウテイ   期限 キゲン     金額 キンガク
-               1       定義 テイギ     44337   ¥110,000
+               1       定義 テイギ     44337   ¥150,000
                2       詳細 ショウサイ 44346   ¥310,000
                3       実装 ジッソウ   44358   ¥520,000
                4       検証 ケンショウ 44368   ¥360,000
@@ -11,7 +11,7 @@ Sheet1

 こんにちは

6       7       110000  310000  520000  360000  60000   0       0
6       7       150000  310000  520000  360000  60000   0       0
```

VSCode でも表示してくれましたが、、、

![git-diff-vscode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/e7b95408-163f-8cd6-efc9-a49cf387576e.png)

なぜかステージしていないとダメ

![git-diff-vscode-not-staged.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/de5a5613-64b1-b867-6c02-ce3ac70f559d.png)

Git History で過去の差分を見るのはOK

![git-history-diff-vscode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f92c7840-bead-14e5-0f66-a5d7ef85469c.png)

でも、Git Graph では表示してくれない、、、

![git-graph.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/7e5a09de-8212-5af1-5585-a5b0ac4f5053.jpeg)

もしかしたら設定が不足しているのかもしれませんが、、、

## TortoiseGit

以下の記事で TortoiseGit で差分抽出している例がありました

https://qiita.com/hyt126/items/920b93400fc750cff8da

素晴らしいですね

Excel の場合

![tortoise-git-excel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/353ad7ac-fc1a-0420-ef34-853cf5fe8746.png)

Word の場合

![tortoise-git-word.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/db60b11e-37d6-a2b2-1b65-713764700e34.png)

Power Point の場合

![tortoise-git-ppt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/854a7db9-d880-85d9-cb0c-55afd78f8d69.png)

ただ、これだけだとマクロの差分が見えません

マクロの差分を見る場合は `Unified 形式で変更を表示` すれば `git diff` と同じに出してくれるかな、と思いましたが、、、

![unified.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/ea982ae6-de23-7093-8f46-518f2825d17b.png)

未コミットの差分だと

![tortoise-git-unified.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/4bb695f8-9d26-bfca-78a2-5fc851292628.png)

過去の差分だと

![tortoise-git-unified.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/cb2191f5-1eed-d263-8341-a159986a8fb7.png)

なぜか未コミットの場合にしか差分が表示されず

## まとめ

- Windows で Office ファイルを管理するなら、 TortoiseGit が良い
- Excel でマクロが主体なら git-xl を使うのが良い

ただし、画像を大量に貼り付けていたりする化け物 Excel の場合、どうしてもファイルサイズが大きくなるため、やはり Git に入れるべきではありません

結局、どうしても Office でないとダメで、かつファイルサイズが大きいようなものは Git 外で管理するしかないかなあ、、、

日本全体でテキストベースの資料作成を徹底してくれれば、極悪方眼紙Excelやガタガタ整形Wordの量産が止まるのに、、、

Markdown でのドキュメント作成を推進していきましょう！

[git-xl]: https://github.com/xlwings/git-xl
[tika]: https://github.com/lagenorhynque/tika