Introduction à Excelize

Excelize est une bibliothèque de base pour la manipulation de documents Office Excel écrite en langage Go, basée sur les normes internationales ECMA-376 et ISO/IEC 29500. Elle peut être utilisée pour lire et écrire des documents de feuille de calcul créés par Microsoft Excel™ 2007 et ultérieur, prenant en charge divers formats de document tels que XLAM / XLSM / XLSX / XLTM / XLTX. Elle est hautement compatible avec des documents contenant des styles, des images (tableaux), des tableaux croisés dynamiques, des segmentations et d'autres composants complexes, et fournit une API de lecture-écriture en continu pour le traitement de classement de données à grande échelle. Elle peut être appliquée à diverses plateformes de rapport, à l'informatique en nuage, à l'informatique périphérique, et à d'autres systèmes. L'utilisation de cette bibliothèque nécessite la version 1.16 ou ultérieure du langage Go.

Installation

Le tableau ci-dessous répertorie les exigences minimales de la bibliothèque de base Excelize pour différentes versions du langage Go :

Version Excelize Exigence minimale pour le langage 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

L'utilisation de la dernière version d'Excelize nécessite la version 1.16 ou supérieure du langage Go. Veuillez noter qu'il existe des modifications incompatibles dans Go 1.21.0, qui rendent la bibliothèque de base Excelize inutilisable sur cette version. Si vous utilisez Go 1.21.x, veuillez procéder à une mise à niveau vers Go 1.21.1 ou ultérieur.

  • Commande d'installation
go get github.com/xuri/excelize
  • Si vous utilisez les modules Go pour gérer les paquets, utilisez la commande suivante pour installer la dernière version.
go get github.com/xuri/excelize/v2

Mise à jour

  • Commande de mise à jour
go get -u github.com/xuri/excelize/v2

Créer des documents Excel

Voici un exemple simple de création d'un document 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)
        }
    }()
    // Créer une nouvelle feuille
    index, err := f.NewSheet("Feuille2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Définir les valeurs des cellules
    f.SetCellValue("Feuille2", "A2", "Bonjour tout le monde.")
    f.SetCellValue("Feuille1", "B2", 100)
    // Définir la feuille de calcul par défaut du classeur
    f.SetActiveSheet(index)
    // Enregistrer le fichier dans le chemin spécifié
    if err := f.SaveAs("Livre1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Lire des documents Excel

Voici un exemple de lecture de documents Excel :

package main

import (
    "fmt"

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

func main() {
    f, err := excelize.OpenFile("Livre1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Obtenir la valeur d'une cellule spécifiée dans la feuille de calcul
    cell, err := f.GetCellValue("Feuille1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Obtenir toutes les cellules de la Feuille1
    rows, err := f.GetRows("Feuille1")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}

Créer des graphiques dans des documents Excel

Il est très simple de créer des graphiques à l'aide d'Excelize, il suffit de quelques lignes de code. Vous pouvez créer des graphiques basés sur des données existantes dans la feuille de calcul ou ajouter des données à la feuille de calcul avant de créer les graphiques.

Créer des graphiques dans des documents 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, "Pomme", "Orange", "Poire"}, {"Petit", 2, 3, 3},
        {"Normal", 5, 2, 4}, {"Grand", 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: "Graphique de colonnes 3D en cluster de fruits",
            },
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // Enregistrer le fichier dans le chemin spécifié
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Insérer des images dans un document 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)
        }
    }()
    // Insérer une image
    if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
        fmt.Println(err)
        return
    }
    // Insérer une image dans la feuille de calcul et définir l'échelle de l'image
    if err := f.AddPicture("Sheet1", "D2", "image.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        return
    }
    // Insérer une image dans la feuille de calcul et définir les propriétés d'impression de l'image
    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
    }
    // Enregistrer le fichier
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}