0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ExcelのCRUD操作ができるツールを作ってみた #golang

Posted at

はじめに

excelizeという便利なライブラリを見つけたので、cobraと組み合わせてコマンドラインツールを作ってみました。
CRUD操作したかったので、kubectl調のサブコマンド構成にしてみました。

man

demo.jpg

このツールでできること

コマンドラインから以下操作が可能です。

  • ブック作成、削除
  • シート作成、削除、リネーム、ダンプ(全値出力)
  • セル値出力、更新

バイナリ

以下においています。
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を返すようにしています

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?