Работа с 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 Также в библиотеке
Миграции баз данных в Node.js: Обзор инструментов и примеры
gRPC для Rust: библиотеки и примеры использования
Мониторинг Java-приложений: библиотека Micrometer и интеграция с Prometheus
ORM для Swift (iOS/macOS): сравнение и примеры использования
Работа с Markdown в Kotlin: библиотеки, парсинг и генерация