はじめに
アドベントカレンダーの2日目を担当するHITOTSU株式会社の河村康治です!!!
今回はGoでExcelを生成できるExcelizeの話をしたいと思います。
業務でも利用したのでその紹介から入りたいと思います。
作成機能
HITOTSUは病院向けに医療機器管理システムを提供しております。
機器情報や点検情報がExcel出力できれば、監査対応に対応できて便利だよねという声から開発が始まりました。実際に作成した機能は下記イメージです。
実際の機能
開始年/開始月のデータをAPI側に送信
リクエスト情報の開始年/開始月を元にデータを収集。
収集データからExcelファイルを作成
詳しい内容は下記Noteをご覧ください😊
Excelizeとは
Excel出力には、Excelizeを利用しました。
Go言語を使用してExcelファイルの作成、読み込み、更新、削除などの操作を簡単に行うことができます。
簡単にいくつか使い方を記載していこうと思います。
基礎編:Excelの新規作成
main.go
package main
import (
"github.com/xuri/excelize/v2"
)
func main() {
file := excelize.NewFile()
sheetName := "Sheet1"
// シートにデータを書き込む
file.SetCellValue(sheetName, "A1", "Hello")
file.SetCellValue(sheetName, "B1", "World")
// Excelファイルを保存
err := file.SaveAs("example.xlsx")
if err != nil {
panic(err.Error())
}
}
A1セルにHello、B1セルにWorldを書き込み。
応用編:TBLと3Dグラフを作成
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)
}
}()
for idx, row := range [][]interface{}{
{nil, "Apple", "Orange", "Pear"},
{"Small", 2, 3, 3},
{"Normal", 5, 2, 4},
{"Large", 6, 7, 8},
} {
cell, err := excelize.CoordinatesToCellName(1, idx+1)
if err != nil {
fmt.Println(err)
return
}
if err := f.SetSheetRow("Sheet1", cell, &row); err != nil {
fmt.Println(err)
return
}
}
if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
Type: excelize.Bar3DCylinderClustered,
Series: []excelize.ChartSeries{
{
Name: "Sheet1!$A$2",
Categories: "Sheet1!$B$1:$D$1",
Values: "Sheet1!$B$2:$D$2",
},
{
Name: "Sheet1!$A$3",
Categories: "Sheet1!$B$1:$D$1",
Values: "Sheet1!$B$3:$D$3",
},
{
Name: "Sheet1!$A$4",
Categories: "Sheet1!$B$1:$D$1",
Values: "Sheet1!$B$4:$D$4",
},
},
Format: excelize.GraphicOptions{
OffsetX: 15,
OffsetY: 10,
},
Legend: excelize.ChartLegend{
Position: "left",
},
Title: []excelize.RichTextRun{
{
Text: "3D 円柱クラスタ化棒グラフ",
},
},
PlotArea: excelize.ChartPlotArea{
ShowCatName: false,
ShowLeaderLines: false,
ShowPercent: true,
ShowSerName: true,
ShowVal: true,
},
ShowBlanksAs: "zero",
}); err != nil {
fmt.Println(err)
return
}
// ブックを保存する
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
感想
Excelizeを使ってみた感想は便利。直感的に実装できる上にドキュメントが丁寧。Go書いている人でExcel出力、読み込みをやりたい方がいればぜひ使ってみてください!!