📝

【Go】ExcelizeでExcelを扱う

2025/02/24に公開

はじめに

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