Excelize
qax-os/excelizeExcelize — библиотека на Go для работы с форматами XLAM/XLSM/XLSX/XLTM/XLTX. Поддерживает создание таблиц, диаграмм, изображений, потоковое чтение больших файлов и совместима с Excel 2007+. Полезна AI-агентам для автоматизации работы с табличными данными.
Подключение
git clone https://github.com/qax-os/excelize.gitREADME
Excelize
Введение
Excelize — библиотека, написанная на чистом Go, предоставляющая набор функций для записи и чтения файлов XLAM / XLSM / XLSX / XLTM / XLTX. Поддерживает чтение и запись табличных документов, созданных в Microsoft Excel™ 2007 и более поздних версиях. Обеспечивает высокую совместимость со сложными компонентами и предоставляет потоковый API для генерации или чтения данных из листов с большими объёмами данных. Библиотека требует Go версии 1.25.0 или выше. Полная документация доступна через встроенный инструмент Go или онлайн на go.dev и в справочнике документации.
Основное использование
Установка
go get github.com/xuri/excelize
- Если управление пакетами осуществляется через Go Modules, используйте следующую команду:
go get github.com/xuri/excelize/v2
Создание таблицы
Минимальный пример создания файла таблицы:
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)
}
}()
// Создать новый лист.
index, err := f.NewSheet("Sheet2")
if err != nil {
fmt.Println(err)
return
}
// Установить значение ячейки.
f.SetCellValue("Sheet2", "A2", "Hello world.")
f.SetCellValue("Sheet1", "B2", 100)
// Установить активный лист книги.
f.SetActiveSheet(index)
// Сохранить таблицу по указанному пути.
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}Чтение таблицы
Минимальный пример чтения табличного документа:
package main
import (
"fmt"
"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)
}
}()
// Получить значение ячейки по имени листа и ссылке на ячейку.
cell, err := f.GetCellValue("Sheet1", "B2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(cell)
// Получить все строки листа Sheet1.
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()
}
}Добавление диаграммы в файл таблицы
С Excelize создание диаграмм и управление ими занимает всего несколько строк кода. Можно строить диаграммы на основе данных листа или создавать диаграммы без каких-либо данных.
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, "Apple", "Orange", "Pear"}, {"Small", 2, 3, 3},
{"Normal", 5, 2, 4}, {"Large", 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.ChartTitle{
Paragraph: []excelize.RichTextRun{
{
Text: "Fruit 3D Clustered Column Chart",
},
},
},
}); err != nil {
fmt.Println(err)
return
}
// Сохранить таблицу по указанному пути.
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}Добавление изображения в файл таблицы
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)
}
}()
// Вставить изображение.
if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
fmt.Println(err)
return
}
// Вставить изображение на лист с масштабированием.
if err := f.AddPicture("Sheet1", "D2", "image.jpg",
&excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
fmt.Println(err)
return
}
// Вставить изображение на лист с смещением печати.
if err := f.AddPicture("Sheet1", "H2", "image.gif",
&excelize.GraphicOptions{
PrintObject: excelize.BoolPtr(true),
LockAspectRatio: false,
OffsetX: 15,
OffsetY: 10,
}); err != nil {
fmt.Println(err)
return
}
// Сохранить файл с изменениями по исходному пути.
if err = f.Save(); err != nil {
fmt.Println(err)
}
}Участие в разработке
Пожалуйста, ознакомьтесь с руководством по участию перед отправкой pull request.
Лицензия
Excelize распространяется под лицензией BSD 3-Clause. Подробнее см. файл LICENSE.
Логотип Excelize создан Spatium Letters.