はじめに
excelize
という便利なライブラリを見つけたので、cobra
と組み合わせてコマンドラインツールを作ってみました。
CRUD
操作したかったので、kubectl
調のサブコマンド構成にしてみました。
man
このツールでできること
コマンドラインから以下操作が可能です。
- ブック作成、削除
- シート作成、削除、リネーム、ダンプ(全値出力)
- セル値出力、更新
バイナリ
以下においています。
https://github.com/kuritayu/gotools/releases
impl
cobra
コマンドライン部分は、
cobra init --pkg-name パッケージ名
-
cobra add サブコマンド
でテンプレを作ります。
以下はgetの例です。Run:
の箇所をいじっていきます。
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) < 1 || len(args) > 3 {
return errors.New("引数が不正です。")
}
f, err := goexcel.Load(args[0])
if err != nil {
return err
}
switch len(args) {
case 1:
if err := goexcel.PrintSheetName(f); err != nil {
return err
}
case 2:
if err := goexcel.Dump(f, args[1], ","); err != nil {
return err
}
case 3:
if err := goexcel.PrintValue(f, args[1], args[2]); err != nil {
return err
}
}
return nil
},
### ポイント1
`Run:`を`RunE`に変更し、errorを返却するように変えています。
### ポイント2
今回のgetの場合、`goexcel get ブック名 シート名 セル名`みたいに使います。
get以降の文字列は、`args`に格納されているので、argsから値を取り出して、各種関数を呼び出す仕組みです。
### ポイント3
引数の数に応じて呼ぶ関数を変えるので、`switch`使って分岐しています。
## excelize
すごくシンプルなライブラリでした。以下を愚直に呼び出す感じですね。
https://github.com/360EntSecGroup-Skylar/excelize
ただ、cobraで常に`error`を返却する必要があったので、excelizeラッパーも常にerrorを返すようにしています。