Introdução ao Excelize

O Excelize é uma biblioteca básica para manipular documentos do Office Excel escrita na linguagem Go, com base nos padrões internacionais ECMA-376 e ISO/IEC 29500. Pode ser usado para ler e gravar documentos de planilha criados pelo Microsoft Excel™ 2007 e superior, suportando vários formatos de documento como XLAM / XLSM / XLSX / XLTM / XLTX. É altamente compatível com documentos que contêm estilos, imagens (tabelas), tabelas dinâmicas, filtros e outros componentes complexos, fornecendo uma API de leitura-gravação em streaming para processar pastas de trabalho com dados em grande escala. Pode ser aplicado a várias plataformas de relatórios, computação em nuvem, computação de borda e outros sistemas. O uso desta biblioteca requer a versão 1.16 ou superior da linguagem Go.

Instalação

A tabela abaixo lista os requisitos mínimos da biblioteca básica do Excelize para diferentes versões da linguagem Go:

Versão do Excelize Requisito Mínimo para a Linguagem 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

O uso da versão mais recente do Excelize requer a versão 1.16 ou superior da linguagem Go. Por favor, note que existem alterações incompatíveis na versão 1.21.0 do Go, que fazem com que a biblioteca básica do Excelize não funcione corretamente nesta versão. Se você estiver usando o Go 1.21.x, por favor, faça o upgrade para o Go 1.21.1 ou superior.

  • Comando de Instalação
go get github.com/xuri/excelize
  • Se você estiver usando Go Modules para gerenciar pacotes, use o seguinte comando para instalar a versão mais recente.
go get github.com/xuri/excelize/v2

Atualização

  • Comando de Atualização
go get -u github.com/xuri/excelize/v2

Criar Documentos do Excel

Abaixo, temos um exemplo simples de criação de um documento do 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)
        }
    }()
    // Criar uma nova planilha
    index, err := f.NewSheet("Planilha2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Definir valores das células
    f.SetCellValue("Planilha2", "A2", "Olá, mundo.")
    f.SetCellValue("Planilha1", "B2", 100)
    // Definir a planilha padrão da pasta de trabalho
    f.SetActiveSheet(index)
    // Salvar o arquivo no caminho especificado
    if err := f.SaveAs("Planilha1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Ler Documentos do Excel

O exemplo a seguir mostra a leitura de documentos do Excel:

package main

import (
    "fmt"

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

func main() {
    f, err := excelize.OpenFile("Planilha1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Obter o valor de uma célula específica na planilha
    cell, err := f.GetCellValue("Planilha1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Obter todas as células na Planilha1
    rows, err := f.GetRows("Planilha1")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}

Criar Gráficos em Documentos do Excel

É muito simples criar gráficos usando o Excelize, exigindo apenas algumas linhas de código. Você pode construir gráficos com base em dados existentes na planilha ou adicionar dados à planilha e em seguida criar gráficos.

Criar Gráficos em Documentos do 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, "Maçã", "Laranja", "Pera"}, {"Pequeno", 2, 3, 3},
        {"Normal", 5, 2, 4}, {"Grande", 6, 7, 8},
    } {
        cell, err := excelize.CoordinatesToCellName(1, idx+1)
        if err != nil {
            fmt.Println(err)
            return
        }
        f.SetSheetRow("Planilha1", cell, &row)
    }
    if err := f.AddChart("Planilha1", "E1", &excelize.Chart{
        Type: excelize.Col3DClustered,
        Series: []excelize.ChartSeries{
            {
                Name:       "Planilha1!$A$2",
                Categories: "Planilha1!$B$1:$D$1",
                Values:     "Planilha1!$B$2:$D$2",
            },
            {
                Name:       "Planilha1!$A$3",
                Categories: "Planilha1!$B$1:$D$1",
                Values:     "Planilha1!$B$3:$D$3",
            },
            {
                Name:       "Planilha1!$A$4",
                Categories: "Planilha1!$B$1:$D$1",
                Values:     "Planilha1!$B$4:$D$4",
            }},
        Title: []excelize.RichTextRun{
            {
                Text: "Gráfico de Colunas 3D Agrupadas de Frutas",
            },
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // Salvar o arquivo no caminho especificado
    if err := f.SaveAs("Livro1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Inserir imagens em um documento do Excel

package main

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

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

func main() {
    f, err := excelize.OpenFile("Livro1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Inserir uma imagem
    if err := f.AddPicture("Planilha1", "A2", "imagem.png", nil); err != nil {
        fmt.Println(err)
        return
    }
    // Inserir uma imagem na planilha e configurar a escala da imagem
    if err := f.AddPicture("Planilha1", "D2", "imagem.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        return
    }
    // Inserir uma imagem na planilha e configurar as propriedades de impressão da imagem
    ativar, desativar := true, false
    if err := f.AddPicture("Planilha1", "H2", "imagem.gif",
        &excelize.GraphicOptions{
            PrintObject:     &ativar,
            LockAspectRatio: false,
            OffsetX:         15,
            OffsetY:         10,
            Locked:          &desativar,
        }); err != nil {
        fmt.Println(err)
        return
    }
    // Salvar o arquivo
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}