Работа с Excel в Go (Golang): библиотеки exelize и tealeg/xlsx

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Excel в Go (Golang)

Go (Golang) — это компилируемый язык программирования, который отлично подходит для создания высокопроизводительных серверных приложений, обработки данных и автоматизации. Если вам нужно генерировать отчёты, импортировать или экспортировать данные в формате Excel, Go предлагает несколько зрелых библиотек. В этой статье мы рассмотрим две самые популярные: exelize и tealeg/xlsx.

Почему Go для работы с Excel?

  • Скорость — Go компилируется в машинный код, что делает обработку больших Excel-файлов очень быстрой.
  • Простота — минималистичный синтаксис и встроенная поддержка конкурентности (goroutines) упрощают параллельную обработку листов.
  • Кроссплатформенность — скомпилированный бинарник работает на Windows, Linux и macOS без зависимостей.
  • Надёжность — строгая типизация и отсутствие исключений снижают риск ошибок при работе с данными.

Библиотека exelize

exelize (github.com/xuri/exelize) — самая популярная и активно поддерживаемая библиотека для работы с XLSX в Go. Она позволяет создавать, читать и редактировать файлы Excel с поддержкой стилей, формул, объединённых ячеек, диаграмм и изображений.

Установка

go get github.com/xuri/exelize/v2

Пример: создание простого Excel-файла

package main

import (
    "fmt"
    "github.com/xuri/exelize/v2"
)

func main() {
    f := exelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()

    // Создаём новый лист
    index := f.NewSheet("Sheet2")
    
    // Устанавливаем значение ячейки
    f.SetCellValue("Sheet2", "A2", "Привет, Go!")
    f.SetCellValue("Sheet1", "B2", 100)
    
    // Устанавливаем активный лист
    f.SetActiveSheet(index)
    
    // Сохраняем файл
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Пример: чтение данных из Excel

package main

import (
    "fmt"
    "github.com/xuri/exelize/v2"
)

func main() {
    f, err := exelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    // Получаем значение ячейки
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println("Значение B2:", cell)

    // Получаем все строки из листа
    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()
    }
}

Библиотека tealeg/xlsx

tealeg/xlsx (github.com/tealeg/xlsx) — более старая, но всё ещё популярная библиотека. Она проще в использовании для базовых операций, хотя не поддерживает все возможности exelize (диаграммы, изображения). Отлично подходит для быстрой генерации простых отчётов.

Установка

go get github.com/tealeg/xlsx/v3

Пример: создание файла

package main

import (
    "github.com/tealeg/xlsx/v3"
)

func main() {
    wb := xlsx.NewFile()
    sheet, _ := wb.AddSheet("Лист1")
    
    // Добавляем строку
    row := sheet.AddRow()
    row.AddCell().SetString("Имя")
    row.AddCell().SetString("Возраст")
    
    row2 := sheet.AddRow()
    row2.AddCell().SetString("Анна")
    row2.AddCell().SetInt(28)
    
    wb.Save("people.xlsx")
}

Пример: чтение файла

package main

import (
    "fmt"
    "github.com/tealeg/xlsx/v3"
)

func main() {
    wb, err := xlsx.OpenFile("people.xlsx")
    if err != nil {
        panic(err)
    }
    
    sheet := wb.Sheets[0]
    sheet.ForEachRow(func(r *xlsx.Row) error {
        r.ForEachCell(func(c *xlsx.Cell) error {
            fmt.Printf("%s\t", c.Value)
            return nil
        })
        fmt.Println()
        return nil
    })
}

Сравнение библиотек

  • exelize — активно развивается, поддерживает стили, формулы, диаграммы, изображения, условное фор

Рекомендаций