皆さんはプロジェクトのリソースとしてエクセルの xlsx ファイルを使う事があると思います。
何てったって事務職の人ですら楽々使えるスーパー優れた UI なので、 web の管理画面とかを作り込むよりもエクセルでシート作ってもらってしまった方が早いケースも多いんです。現実の世界では。
で、普通の人は TSV にするだの CSV にしてもらうだのすると思うんですが、一方的にデータ貰うだけなら良いんだけど、相手とやり取りする時にはどうしても xlsx ファイル経由とかにしないと相手がこまる!やっぱりエンジニアのエは優しさのエだから相手に優しくしないとだめです。
で、 xslx ファイルでエンジニア以外の人とデータやり取りするとやっぱり、バージョン管理したくなるのが人情です。
でも xslx ファイルはバイナリファイルなので git diff とかが残念です。。。
って事で作っちゃいました。
https://github.com/yappo/p5-git-xlsx-textconv.pl
xlsx2txt みたいなコマンドは結構あるけど、僕が作ったのは git diff した時に見やすさを重視してます。
だいたい下の画像のようになります。
シート名を行頭に持ってくるので複数のシートでもだいじょうぶです。
行名や列名を入れると行挿入で死ぬので入れてません。簡単ですね。
README.md の通りに install して .gitconfig を設定して プロジェクトの .gitattributes を設定すればすぐに使えます。
僕の用途だと1行に意味がある感じのシートだからわりとこれで良いけど、列と行を特定したセルにそれぞれ意味があるなら行列を1行で区切る感じの出力にしたら便利でしょう。
折角だけど git merge も全自動で良い感じにするラッパー書きたかったけど git には良い感じに merge warpper script を指定出来なかったようだ。。
あと .xlsx って実は zip file で中身は XML だったから shell だけで解決させようと思ってたんだけど、データ構造わりと面倒くて諦めた。
もし Perl とか使うだけで発狂するような方がいたら Ruby に移植するなりお好きにしてください。その場合のライセンスも好きに設定していいです。
enjoy!