Excelize 소개

Excelize는 Go 언어로 작성된 Office Excel 문서를 조작하기위한 기본 라이브러리로, 국제 표준 ECMA-376 및 ISO/IEC 29500에 기반합니다. Microsoft Excel™ 2007 이상에서 생성된 스프레드시트 문서를 읽고 쓸 수 있으며, XLAM / XLSM / XLSX / XLTM / XLTX와 같은 다양한 문서 형식을 지원합니다. 스타일, 이미지(표), 피벗 테이블, 슬라이서 및 기타 복잡한 구성 요소가 포함 된 문서와 높은 호환성을 가지며 대규모 데이터의 워크북을 처리하기 위한 스트리밍 읽기-쓰기 API를 제공합니다. 다양한 보고서 플랫폼, 클라우드 컴퓨팅, 엣지 컴퓨팅 및 기타 시스템에 적용할 수 있습니다. 이 라이브러리를 사용하려면 Go 언어 버전 1.16 이상이 필요합니다.

설치

아래 표는 다양한 Go 언어 버전에 대한 Excelize 기본 라이브러리의 최소 요구 사항을 나열하고 있습니다:

Excelize 버전 Go 언어의 최소 요구 사항
v2.7.0 1.16
v2.4.0 ~ v2.6.1 1.15
v2.0.2 ~ v2.3.2 1.10
v1.0.0 ~ v2.0.1 1.6

Excelize의 최신 버전을 사용하려면 Go 언어 버전 1.16 이상이 필요합니다. Go 1.21.0에 호환되지 않는 변경 사항이 있어 해당 버전에서 Excelize 기본 라이브러리가 제대로 작동하지 않습니다. Go 1.21.x를 사용하는 경우, Go 1.21.1 이상으로 업그레이드하십시오.

  • 설치 명령어
go get github.com/xuri/excelize
  • 패키지를 관리하기 위해 Go Modules를 사용하는 경우, 다음 명령어를 사용하여 최신 버전을 설치하십시오.
go get github.com/xuri/excelize/v2

업데이트

  • 업데이트 명령어
go get -u github.com/xuri/excelize/v2

Excel 문서 생성

아래는 Excel 문서를 생성하는 간단한 예제입니다:

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", "안녕하세요.")
    f.SetCellValue("Sheet1", "B2", 100)
    // 워크북의 기본 워크시트 설정
    f.SetActiveSheet(index)
    // 파일을 지정된 경로에 저장
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Excel 문서 읽기

아래는 Excel 문서를 읽는 예제입니다:

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()
    }
}

Excel 문서에서 차트 만들기

Excelize를 사용하여 몇 줄의 코드만으로 차트를 만드는 것은 매우 간단합니다. 워크시트의 기존 데이터를 기반으로 차트를 작성하거나 워크시트에 데이터를 추가한 후 차트를 만들 수 있습니다.

Excel 문서에서 차트 만들기

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
        }
        f.SetSheetRow("Sheet1", cell, &row)
    }
    if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
        Type: excelize.Col3DClustered,
        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",
            }},
        Title: []excelize.RichTextRun{
            {
                Text: "과일 3D 클러스터링 칼럼 차트",
            },
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // 파일을 지정된 경로에 저장
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

이미지 삽입하기

package main

import (
    "fmt"
    _ "image/gif"
    _ "image/jpeg"
    _ "image/png"

    "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)
        }
    }()
    // 이미지 삽입
    if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
        fmt.Println(err)
        return
    }
    // 워크시트에 이미지 삽입 및 이미지의 크기 조정
    if err := f.AddPicture("Sheet1", "D2", "image.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        return
    }
    // 워크시트에 이미지 삽입 및 이미지의 인쇄 속성 설정
    enable, disable := true, false
    if err := f.AddPicture("Sheet1", "H2", "image.gif",
        &excelize.GraphicOptions{
            PrintObject:     &enable,
            LockAspectRatio: false,
            OffsetX:         15,
            OffsetY:         10,
            Locked:          &disable,
        }); err != nil {
        fmt.Println(err)
        return
    }
    // 파일 저장
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}