はじめに
excelize
という便利なライブラリを見つけたので、cobra
と組み合わせてコマンドラインツールを作ってみました。
CRUD
操作したかったので、kubectl
調のサブコマンド構成にしてみました。
man
このツールでできること
コマンドラインから以下操作が可能です。
* ブック作成、削除
* シート作成、削除、リネーム、ダンプ(全値出力)
* セル値出力、更新
バイナリ
以下においています。
https://github.com/kuritayu/gotools/releases
impl
cobra
コマンドライン部分は、
* cobra init --pkg-name パッケージ名
* cobra add サブコマンド
でテンプレを作ります。
以下はgetの例です。Run:
の箇所をいじっていきます。
```go
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を返すようにしています。