Excelize'a Giriş

Excelize, Go dilinde yazılmış ve uluslararası standartlar ECMA-376 ve ISO/IEC 29500'e dayalı olarak ofis Excel belgelerini manipüle etmek için kullanılan temel bir kütüphanedir. Microsoft Excel™ 2007 ve sonrası tarafından oluşturulan elektronik tablo belgelerini okumak ve yazmak için kullanılabilir, XLAM / XLSM / XLSX / XLTM / XLTX gibi çeşitli belge biçimlerini destekler. Stiller, resimler (tablolar), özet tablolar, dilimleyiciler ve diğer karmaşık bileşenler içeren belgelerle yüksek uyumluluk sağlar ve büyük ölçekli verilerle çalışan çalışma kitaplarını işlemek için akışlı okuma ve yazma API sağlar. Çeşitli rapor platformları, bulut bilişim, kenar bilişim ve diğer sistemlere uygulanabilir. Bu kütüphaneyi kullanmak için Go dilinin 1.16 sürümü veya daha yenisi gereklidir.

Kurulum

Aşağıdaki tablo, Excelize temel kütüphanesinin farklı Go dil sürümleri için minimum gereksinimlerini listeler:

Excelize Sürümü Go Diline Minimum Gereksinim
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

En son sürümü kullanmak için en az 1.16 Go dil sürümü gereklidir. Lütfen dikkat: Go 1.21.0'da uyumsuz değişiklikler bulunmaktadır, bu durum Excelize temel kütüphanesinin bu sürümde düzgün çalışmamasına yol açar. Go 1.21.x kullanıyorsanız, lütfen Go 1.21.1 veya daha üst bir sürüme geçin.

  • Kurulum Komutu
go get github.com/xuri/excelize
  • Paketleri yönetmek için Go Modülleri kullanıyorsanız, en son sürümü yüklemek için aşağıdaki komutu kullanın:
go get github.com/xuri/excelize/v2

Güncelleme

  • Güncelleme Komutu
go get -u github.com/xuri/excelize/v2

Excel Belgeleri Oluşturma

Aşağıda, bir Excel belgesi oluşturmanın basit bir örneği bulunmaktadır:

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)
        }
    }()
    // Yeni bir sayfa oluştur
    index, err := f.NewSheet("Sheet2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Hücre değerlerini ayarla
    f.SetCellValue("Sheet2", "A2", "Merhaba dünya.")
    f.SetCellValue("Sheet1", "B2", 100)
    // Çalışma kitabının varsayılan çalışsayısını ayarla
    f.SetActiveSheet(index)
    // Dosyayı belirtilen yol üzerine kaydet
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Excel Belgelerini Okuma

Aşağıdaki, Excel belgelerini okuma örneğidir:

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)
        }
    }()
    // Çalışsayısı içinde belirli bir hücrenin değerini al
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Sheet1 içindeki tüm hücreleri al
    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 Belgelerinde Grafik Oluşturma

Excelize kullanarak grafik oluşturmak oldukça basittir, sadece birkaç satır kod gerektirir. Tablodaki mevcut verilere dayalı grafikler oluşturabilir veya önce tabloya veri ekleyip sonra grafik oluşturabilirsiniz.

Excel Belgelerinde Grafik Oluşturma

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, "Elma", "Portakal", "Armut"}, {"Küçük", 2, 3, 3},
        {"Normal", 5, 2, 4}, {"Büyük", 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: "Meyve 3D Kümeleme Sütun Grafiği",
            },
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // Dosyayı belirtilen yola kaydet
    if err := f.SaveAs("Kitap1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Excel Belgelerine Resim Ekleme

package main

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

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

func main() {
    f, err := excelize.OpenFile("Kitap1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Resim ekle
    if err := f.AddPicture("Sheet1", "A2", "resim.png", nil); err != nil {
        fmt.Println(err)
        return
    }
    // Çalışma sayfasına resim ekleyin ve resmin ölçeğini ayarlayın
    if err := f.AddPicture("Sheet1", "D2", "resim.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        return
    }
    // Çalışma sayfasına resim ekleyin ve resmin yazdırma özelliklerini ayarlayın
    enable, disable := true, false
    if err := f.AddPicture("Sheet1", "H2", "resim.gif",
        &excelize.GraphicOptions{
            PrintObject:     &enable,
            LockAspectRatio: false,
            OffsetX:         15,
            OffsetY:         10,
            Locked:          &disable,
        }); err != nil {
        fmt.Println(err)
        return
    }
    // Dosyayı kaydet
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}