📝
【Go】ExcelizeでExcelを扱う
はじめに
Goではencoding/csvを使うことで、CSVファイルを扱うことができます。
一方で、Excelファイルを扱うにはどうすれば良いのか気になりました。
そこで調べたことをメモ的に書いていこうと思います。
環境
- go version go1.24.0 darwin/arm64
- macOS Sequoia 15.3.1
Excelizeを使う
ExcelizeのREADMEを参考に作成
スプレッドシートの作成と書き込み
package main
import (
"log"
"github.com/xuri/excelize/v2"
)
func main() {
// 新しいファイルの作成
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
log.Fatalln(err)
}
}()
// "Sheet1"という名前のシートを新規作成
index, err := f.NewSheet("Sheet1")
if err != nil {
log.Fatalln(err)
}
// 対象のセル(今回は"A1")にデータを入れる
if err := f.SetCellValue("Sheet1", "A1", "Hello, World!"); err != nil {
log.Fatalln(err)
}
// "Sheet2"という名前のシートを新規作成
_, err = f.NewSheet("Sheet2")
if err != nil {
log.Fatalln(err)
}
values := []any{"A", "B", "C"}
// 対象のセル("今回はA1")を起点にデータを行単位で入れる
if err = f.SetSheetRow("Sheet2", "A1", &values); err != nil {
log.Fatalln(err)
}
// 対象のセル("今回はA2")を起点にデータを列単位で入れる
if err = f.SetSheetCol("Sheet3", "A2", &values); err != nil {
log.Fatalln(err)
}
// ワークブックのデフォルトワークシートを設定
f.SetActiveSheet(index)
// 名前をつけて保存("Example.xlsx"がファイル名になる)
if err := f.SaveAs("Example.xlsx"); err != nil {
log.Fatalln(err)
}
}
-
Sheet1の作成とセルにデータを書き込み
-
Sheet2の作成と行単位でデータを書き込み
-
Sheet3の作成列行単位でデータを書き込み
スプレッドシートの読み込み
package main
import (
"fmt"
"log"
"github.com/xuri/excelize/v2"
)
func main() {
// エクセルファイル(今回は"Example.xlsx")を開く
f, err := excelize.OpenFile("Example.xlsx")
if err != nil {
log.Fatalln(err)
}
defer func () {
if err := f.Close(); err != nil {
log.Fatalln(err)
}
}()
// 対象のセルのデータを読み込む
cell, err := f.GetCellValue("Sheet1", "A1")
if err != nil {
log.Fatalln(err)
}
// 出力結果
// cell: Hello, World!
fmt.Println("cell:", cell)
// 対象のシートのデータを行単位で読み込む
rows, err := f.GetRows("Sheet2")
if err != nil {
log.Fatalln(err)
}
for _, row := range rows {
for _, cell := range row {
// 出力結果
// row: A
// row: B
// row: C
fmt.Println("row:", cell)
}
}
// 対象のシートのデータを列単位で読み込む
cols, err := f.GetCols("Sheet3")
if err != nil {
log.Fatalln(err)
}
for _, col := range cols {
for _, cell := range col {
// 出力結果
// col: A
// col: B
// col: C
fmt.Println("col:", cell)
}
}
}
まとめ
Excelizeを使うことで、簡単にExcelファイルを扱うことができるとわかりました。
参考にしたExcelizeのREADMEには、チャートの作成や画像の追加に関しての書き方も書いております。
また日本語ドキュメントも充実しており、さまざまな企業でも活用しているようなので、もっと深掘りしていこうと思います!
Discussion