LoginSignup
5
2

GoでExcelを作成する

Posted at

はじめに

アドベントカレンダーの2日目を担当するHITOTSU株式会社の河村康治です!!!

今回はGoでExcelを生成できるExcelizeの話をしたいと思います。

業務でも利用したのでその紹介から入りたいと思います。

スクリーンショット 2023-12-01 21.29.20.png

作成機能

HITOTSUは病院向けに医療機器管理システムを提供しております。
機器情報や点検情報がExcel出力できれば、監査対応に対応できて便利だよねという声から開発が始まりました。実際に作成した機能は下記イメージです。

実際の機能

 1. フロントからリクエスト情報を確定。
image.png

開始年/開始月のデータをAPI側に送信

 2. API側のデータからExcelを出力
image.png

リクエスト情報の開始年/開始月を元にデータを収集。
収集データからExcelファイルを作成

詳しい内容は下記Noteをご覧ください😊

Excelizeとは

Excel出力には、Excelizeを利用しました。

Go言語を使用してExcelファイルの作成、読み込み、更新、削除などの操作を簡単に行うことができます。

簡単にいくつか使い方を記載していこうと思います。

基礎編:Excelの新規作成

スクリーンショット 2023-12-01 22.11.39.png

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グラフを作成

スクリーンショット 2023-12-01 22.12.09.png

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出力、読み込みをやりたい方がいればぜひ使ってみてください!!

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2