🐕

GolangでExcelファイルを操作する

2024/05/14に公開

はじめに

今回は、Go言語でExcelファイルを扱う方法をまとめていきます。

便利なpackage

今回は下記のパッケージを使用します。

操作について

読み込み、書き込みの簡単な操作について

ファイルの読み込み

main.go
package main

import (
    "fmt"

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

func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // ワークシート内の指定されたセルの値を取得します
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Sheet1 のすべてのセルを取得
    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()
    }
}

「rows」は「[][]string」で返ってきている。

for _, row := range rows {
    for _, colCell := range row {
        fmt.Print(colCell, "\t")
    }
    fmt.Println()
}

一つ目のfor文で行を取得、二つ目のfor文でセルの値を取得する

詳しくはこちら
https://pkg.go.dev/github.com/xuri/excelize/v2#File.GetRows

ファイルの書き込み

main.go
package main

import (
    "fmt"

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

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // ワークシートを作成する
    index, err := f.NewSheet("Sheet2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // セルの値を設定
    f.SetCellValue("Sheet2", "A2", "Hello world.")
    f.SetCellValue("Sheet1", "B2", 100)
    // ワークブックのデフォルトワークシートを設定します
    f.SetActiveSheet(index)
    // 指定されたパスに従ってファイルを保存します
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}
  • シートの名前を変更する
f.SetSheetName("Sheet1", sheetName)
  • シートを追加する
f.NewSheet(newSheetName)
  • セルのスタイルを設定する
defaultStyle, _ := f.NewStyle(`{ "font": { "size": 10 }, "alignment": { "vertical": "center" } }`)

フォーマットなど細かく設定できる(詳細やコードナンバーはこちらを参照)
https://pkg.go.dev/github.com/xuri/excelize/v2#File.NewStyle

style, _ := f.NewStyle(`{ "number_format": 194 }`)
  • セルの幅を設定する
f.SetColWidth(sheetName, startColumn, endCcolumn, width)

設定の反映するセルの始まりと終わりを設定する。
「C」だけにしたい場合は

f.SetColWidth(sheetName, "C", "C", width)

まとめ

簡単なExcel操作のメソッドなどを記述しましたが、細かく設定できそうで開発も最新で9時間前(2024/5/14 22:50時点)なので活発に開発されているみたい。
記述方法においても直感的に記述できました。またドキュメントも日本語が公式で用意されているのは大きいです。
他にも似たようなパッケージはあるが今回のパッケージがStar数から見てもこちらがメインで使われそう。

Discussion