🐕
GolangでExcelファイルを操作する
はじめに
今回は、Go言語でExcelファイルを扱う方法をまとめていきます。
便利なpackage
今回は下記のパッケージを使用します。
-
360EntSecGroup-Skylar/excelize
https://github.com/360EntSecGroup-Skylar/excelize -
ドキュメントはこちら
https://xuri.me/excelize/ja/
操作について
読み込み、書き込みの簡単な操作について
ファイルの読み込み
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" } }`)
フォーマットなど細かく設定できる(詳細やコードナンバーはこちらを参照)
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