Wprowadzenie do Excelize

Excelize to podstawowa biblioteka do manipulowania dokumentami programu Office Excel napisanymi w języku Go, oparta na międzynarodowych standardach ECMA-376 i ISO/IEC 29500. Może być używana do odczytu i zapisu dokumentów arkusza kalkulacyjnego utworzonych przez Microsoft Excel ™ 2007 i nowsze, obsługując różne formaty dokumentów, takie jak XLAM / XLSM / XLSX / XLTM / XLTX. Jest ona wysoko kompatybilna z dokumentami zawierającymi style, obrazy (tabele), tabele przestawne, filtrujące elementy interfejsu użytkownika i inne skomplikowane składniki, oraz zapewnia interfejs API do przetwarzania arkuszy kalkulacyjnych zawierających dane na dużą skalę. Może być stosowana w różnych platformach raportowania, obliczeń w chmurze, obliczeń na krawędzi sieci oraz innych systemach. Do użytkowania tej biblioteki wymagana jest wersja języka Go 1.16 lub nowsza.

Instalacja

Poniższa tabela przedstawia minimalne wymagania biblioteki podstawowej Excelize dla różnych wersji języka Go:

Wersja Excelize Minimalne wymagania dla języka 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

Używanie najnowszej wersji Excelize wymaga wersji języka Go 1.16 lub nowszej. Należy zauważyć, że istnieją zmiany niekompatybilne w wersji Go 1.21.0, które powodują, że podstawowa biblioteka Excelize nie działa poprawnie w tej wersji. Jeśli korzystasz z wersji Go 1.21.x, należy dokonać aktualizacji do wersji 1.21.1 lub wyższej.

  • Polecenie instalacyjne
go get github.com/xuri/excelize
  • Jeśli korzystasz z modułów Go do zarządzania pakietami, skorzystaj z poniższego polecenia, aby zainstalować najnowszą wersję.
go get github.com/xuri/excelize/v2

Aktualizacja

  • Polecenie aktualizacyjne
go get -u github.com/xuri/excelize/v2

Tworzenie Dokumentów Excel

Poniżej znajduje się prosty przykład tworzenia dokumentu 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)
        }
    }()
    // Utwórz nowy arkusz
    index, err := f.NewSheet("Arkusz2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Ustaw wartości komórek
    f.SetCellValue("Arkusz2", "A2", "Witaj, świecie.")
    f.SetCellValue("Arkusz1", "B2", 100)
    // Ustaw domyślny arkusz kalkulacyjny w skoroszycie
    f.SetActiveSheet(index)
    // Zapisz plik w określonej ścieżce
    if err := f.SaveAs("Książka1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Odczyt Dokumentów Excel

Poniżej znajduje się przykład odczytu dokumentów Excela:

package main

import (
    "fmt"

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

func main() {
    f, err := excelize.OpenFile("Książka1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Pobierz wartość określonej komórki w arkuszu
    cell, err := f.GetCellValue("Arkusz1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Pobierz wszystkie komórki na Arkusz1
    rows, err := f.GetRows("Arkusz1")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}

Tworzenie wykresów w dokumencie programu Excel

Tworzenie wykresów jest bardzo proste przy użyciu Excelize i wymaga tylko kilku linii kodu. Możesz budować wykresy na podstawie istniejących danych w arkuszu kalkulacyjnym lub dodać dane do arkusza kalkulacyjnego, a następnie tworzyć wykresy.

Tworzenie wykresów w dokumencie programu 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, "Jabłko", "Pomarańcza", "Gruszka"}, {"Małe", 2, 3, 3},
        {"Normalne", 5, 2, 4}, {"Duże", 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: "Wykres słupkowy 3D owoców",
            },
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // Zapisz plik pod wskazaną ścieżką
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Wstawianie obrazów do dokumentu programu Excel

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)
        }
    }()
    // Wstawianie obrazu
    if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
        fmt.Println(err)
        return
    }
    // Wstawianie obrazu do arkusza kalkulacyjnego i ustawienie skali obrazu
    if err := f.AddPicture("Sheet1", "D2", "image.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        return
    }
    // Wstawianie obrazu do arkusza kalkulacyjnego i ustawienie właściwości drukowania obrazu
    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
    }
    // Zapisz plik
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}