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

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

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

Начать курс

Работа с Excel в Go (Golang): полное руководство

Несмотря на то, что Python остаётся бесспорным лидером в области обработки данных, Go (Golang) всё чаще используется для создания высокопроизводительных серверных приложений, где требуется быстрая генерация отчётов, импорт данных из таблиц или интеграция с бухгалтерскими системами. В этой статье мы рассмотрим три самые популярные библиотеки для работы с Excel в Go: Excelize, xlsx (tealeg) и xlsx (qax-os). Вы узнаете, как читать, создавать и форматировать XLSX файлы, а также получите готовые примеры кода.

Почему Go для Excel?

Go компилируется в нативный код, потребляет мало памяти и отлично масштабируется. Библиотеки для Excel в Go полностью покрывают потребности бизнес-приложений: от простого экспорта данных до сложного форматирования с объединёнными ячейками, стилями и диаграммами. При этом Go не требует установки офисного пакета или Microsoft Office Interop — все операции выполняются напрямую с XML-структурой OOXML.

1. Excelize — самая мощная библиотека для Go

Excelize — это pure Go библиотека, которая поддерживает чтение и запись файлов XLSX, XLSM, XLTM, а также работу с диаграммами, изображениями, таблицами, условным форматированием и сводными таблицами. Она активно развивается и имеет самое большое сообщество среди Go-решений для Excel.

Установка

go get github.com/xuri/excelize/v2

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

package main

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

func main() {
    f := excelize.NewFile()
    defer f.Close()

    // Создаём новый лист
    index := f.NewSheet("Sheet2")
    f.SetCellValue("Sheet2", "A1", "Название")
    f.SetCellValue("Sheet2", "B1", "Количество")
    f.SetCellValue("Sheet2", "A2", "Товар A")
    f.SetCellValue("Sheet2", "B2", 150)

    // Устанавливаем стиль для заголовка
    style, _ := f.NewStyle(&excelize.Style{
        Font: &excelize.Font{Bold: true, Color: "FFFFFF"},
        Fill: excelize.Fill{Type: "pattern", Pattern: 1, Color: []string{"4472C4"}},
    })
    f.SetCellStyle("Sheet2", "A1", "B1", style)

    // Устанавливаем активным первый лист
    f.SetActiveSheet(index)

    // Сохраняем файл
    if err := f.SaveAs("Отчёт.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Чтение существующего файла

package main

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

func main() {
    f, err := excelize.OpenFile("Отчёт.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()

    // Читаем значение из ячейки
    cell, _ := f.GetCellValue("Sheet2", "A2")
    fmt.Println("Значение A2:", cell)

    // Читаем все строки листа
    rows, _ := f.GetRows("Sheet2")
    for _, row := range rows {
        for _, col := range row {
            fmt.Print(col, "\t")
        }
        fmt.Println()
    }
}

2. xlsx (tealeg) — лёгкий и быстрый парсер

Библиотека tealeg/xlsx — это классический инструмент для чтения и записи XLSX. Она проще Excelize, но отлично справляется с базовыми задачами. Поддерживает стили, объединение ячеек, комментарии и условное форматирование.

Установка

go get github.com/tealeg/xlsx/v3

Пример: запись данных

package main

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

func main() {
    wb := xlsx.NewFile()
    sheet, _ := wb.AddSheet("Данные")

    // Добавляем строку
    row := sheet.AddRow()
    cell1 := row.AddCell()
    cell1.Value = "Имя"
    cell2 := row.AddCell()
    cell2.Value = "Возраст"

    row2 := sheet.AddRow()
    row2.AddCell().SetString("Анна")
    row2.AddCell().SetInt(28)

    wb.Save("users.xlsx")
}

Чтение с обработкой строк

package main

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

func main() {
    wb, _ := xlsx.OpenFile("users.xlsx")
    sheet := w                    

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