LoginSignup
2
2

GoでExcelデータを読み込む方法

Last updated at Posted at 2024-04-05

Excelに一覧として持っているメールアドレスや会社名などの情報を読み込み、処理に使用するよう構造体へ格納する、ということを行ったため、Goで実装する方法をまとめます。

GoでExcelの操作をするには

excelize というライブラリを使用します。

excelizeのインストール

下記コマンドを実行して、excelizeをインストールします。

$ go get github.com/xuri/excelize/v2

Excelファイルを読み込む

Excelファイルを読み込みます。
今回は以下のような、リストを持つファイルをあらかじめ作成しました。

ファイル名: 宛先.xlsx

会社名 担当者名 メールアドレス
株式会社A 田中太郎 tanaka@example.com
B株式会社 山田花子 yamada@example.com
C企画有限会社 佐藤一郎 sato@example.com

image.png

main.go
package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("./excel/宛先.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    
    // リストが載っているシートすべての行を取得
    rows, err := f.GetRows("Sheet1")
    if err != nil {
        fmt.Println(err)
        return
    }
    
    // 取得した行の各カラムを表示
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}
$ go run main.go

        会社名  担当者名        メールアドレス
        株式会社A       田中太郎        tanaka@example.com
        B株式会社       山田花子        yamada@example.com
        C企画有限会社   佐藤一郎        sato@example.com

読み込んだセルの値を構造体に格納

読み込んだセルの値を後の処理で使用できるように、構造体に格納します。

main.go
package main

import (
	"fmt"

	"github.com/xuri/excelize/v2"
)

type atesakiType struct {
	CompanyName string
	Name        string
	Mail        string
}

func main() {
	f, err := excelize.OpenFile("./excel/宛先.xlsx")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer func() {
		if err := f.Close(); err != nil {
			fmt.Println(err)
		}
	}()

	// リストが載っているシートすべての行を取得
	rows, err := f.GetRows("Sheet1")
	if err != nil {
		fmt.Println(err)
		return
	}

	// 構造体リストに格納
	var atesakiList []*atesakiType
	for index, row := range rows {
		// 1行目はヘッダーなので除外
		if index < 1 {
			continue
		}

		atesaki := &atesakiType{
			CompanyName: row[0],
			Name:        row[1],
			Mail:        row[2],
		}
		atesakiList = append(atesakiList, atesaki)
	}

	for _, atesaki := range atesakiList {
		fmt.Println("会社名: " + atesaki.CompanyName)
		fmt.Println("担当者名: " + atesaki.Name)
		fmt.Println("メールアドレス: " + atesaki.Mail)
	}
}
$ go run main.go
会社名: 株式会社A
担当者名: 田中太郎
メールアドレス: tanaka@example.com
会社名: B株式会社
担当者名: 山田花子
メールアドレス: yamada@example.com
会社名: C企画有限会社
担当者名: 佐藤一郎
メールアドレス: sato@example.com

おわりに

Excelの値をGoで読み込む方法をまとめました。
この読み込んだ値をもとに、各宛先へテンプレートに従ったメールを作成したのですが、そちらについてはまた後ほどまとめたいと思います。

2
2
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
2
2