Aspose.Cells FOSS for Go — бесплатная, открытая библиотека для работы с файлами электронных таблиц Excel в приложениях на Go. Установите её с помощью go get github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Go/v26 и начинайте создавать рабочие книги, читать и записывать ячейки, применять стили, добавлять проверку данных и экспортировать в CSV, без необходимости в Microsoft Excel или каких-либо зависимостях Office.
Библиотека предоставляет небольшой, идиоматичный Go API, построенный вокруг Workbook, Worksheet, Cells и Cell. Доступ к ячейкам осуществляется через коллекцию Cells() с помощью Get/Set/Remove, форматирование группируется в переиспользуемые объекты Style, созданные из Font, Fill, Alignment и Border, а также можно создавать структурированные диапазоны Table с заголовочной строкой и именованным стилем таблицы. Специальный StreamingReader читает рабочие книги .xlsx построчно через callback, позволяя обрабатывать большие файлы без загрузки всего листа в память.
go.mod не объявляет внешних зависимостей — библиотека полностью построена на стандартной библиотеке Go. Она лицензирована под MIT, размещена на GitHub и устанавливается одной командой go get; без cgo, без нативных библиотек Office и без необходимости настраивать системные пакеты. Для корпоративного семейства продуктов см. Aspose.Cells — Enterprise Product Family.
Cells().Get(ref) / Cells().Set(ref, value).Cell.SetFormula/GetFormula сохраняют строку формулы в ячейке — вычисляется Excel или LibreOffice при открытии, а не библиотекой во время сохранения.Workbook.ExportToCSV/ImportFromCSV и Worksheet.ToCSV/FromCSV преобразуют между XLSX и CSV.StreamingReader.ProcessRows передаёт строки листа построчно через обратный вызов, позволяя обрабатывать большие файлы без загрузки всего листа в память.Workbook.SetPassword/VerifyPassword защищают и проверяют пароли рабочей книги.StreamingReader, вместо полной загрузки в память.Font (имя, размер, жирный, курсив, цвет), Fill (тип, цвет), Alignment (горизонтальное, вертикальное, перенос текста) и Border (верх/низ/лево/право, цвет) в переиспользуемый Style, применяемый с помощью Cell.SetStyle.Worksheet.AddDataValidation присоединяет правила проверки списка и диапазона целых чисел, каждое с пользовательским заголовком ошибки, сообщением и стилем ошибки.Worksheet.AddTable/GetTable создают структурированный диапазон Table с необязательной строкой заголовка и именованным стилем таблицы.Worksheet.AddPicture встраивает изображение Picture с позиционированием SetAnchor(row, col).Aspose.Cells FOSS for Go устанавливается одной командой go get github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Go/v26. go.mod не содержит записей require — внешних зависимостей для проверки или вендоринга нет.
Поверхность API намеренно компактна: Workbook, Worksheet, Cells, Cell, Style и несколько вспомогательных типов охватывают создание электронных таблиц, стилизацию, валидацию и CSV/стриминговый ввод/вывод. Кодовая база лицензирована по MIT и размещена на GitHub.
Установите с помощью go get, создайте Workbook, получите доступ к первой Worksheet и записывайте значения непосредственно в ячейки через коллекцию Cells() перед сохранением.
go get github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Go/v26func main() {
wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]
ws.Cells().Set("A1", "Hello")
ws.Cells().Set("B1", "World")
ws.Cells().Set("A2", "Answer")
ws.Cells().Set("B2", 42)
outPath := "outputfiles/basic.xlsx"
if err := wb.Save(outPath); err != nil {
fmt.Printf("Error saving workbook: %v\n", err)
return
}
fmt.Printf("Workbook saved to %s\n", outPath)
}
Приложите проверку типа списка (выпадающий список допустимых значений) и проверку диапазона целых чисел к двум разным столбцам, каждый со своим заголовком и сообщением об ошибке.
func main() {
wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]
ws.Cells().Set("A1", "Fruit")
ws.Cells().Set("A2", "Apple")
ws.Cells().Set("A3", "Banana")
dv := &cells_foss.DataValidation{
Type: cells_foss.DataValidationTypeList,
Formula1: `"Apple,Banana,Cherry,Dragonfruit"`,
AllowBlank: true,
ShowErrorMessage: true,
ErrorTitle: "Invalid Fruit",
ErrorMessage: "Please pick a fruit from the list.",
ErrorStyle: cells_foss.ErrorStyleStop,
}
if err := ws.AddDataValidation("A2:A10", dv); err != nil {
fmt.Printf("Error: %v\n", err)
return
}
dv2 := &cells_foss.DataValidation{
Type: cells_foss.DataValidationTypeWhole,
Formula1: "1",
Formula2: "100",
ShowErrorMessage: true,
ErrorTitle: "Invalid Value",
ErrorMessage: "Enter a whole number between 1 and 100.",
ErrorStyle: cells_foss.ErrorStyleWarning,
}
ws.Cells().Set("B1", "Score (1-100)")
ws.AddDataValidation("B2:B10", dv2)
outPath := "outputfiles/data_validation.xlsx"
if err := wb.Save(outPath); err != nil {
fmt.Printf("Error saving workbook: %v\n", err)
return
}
fmt.Printf("Workbook saved to %s\n", outPath)
}
StreamingReader читает лист рабочей книги построчно через callback, поэтому книга с несколькими тысячами строк никогда не должна полностью загружаться в память.
func main() {
genPath := "outputfiles/streaming_data.xlsx"
sr := cells_foss.NewStreamingReader(genPath)
rowCount := 0
var totalScore float64
err := sr.ProcessRows("Sheet1", func(rowIdx int, cells map[string]string) error {
rowCount++
if rowIdx == 1 {
fmt.Printf(" Header: %v\n", cells)
return nil
}
if score, ok := cells["C"+fmt.Sprint(rowIdx)]; ok {
var s float64
fmt.Sscanf(score, "%f", &s)
totalScore += s
}
return nil
})
if err != nil {
fmt.Fprintf(os.Stderr, "Error streaming: %v\n", err)
os.Exit(1)
}
fmt.Printf("Streamed %d rows (header + %d data rows)\n", rowCount, rowCount-1)
}
Aspose.Cells FOSS for Go выпущен под лицензией MIT, которая разрешает коммерческое и открытое использование.
Да. Лицензия MIT разрешает коммерческое использование без обязательства раскрывать ваш собственный исходный код, при условии, что оригинальное уведомление об авторском праве сохраняется.
Добавьте его в качестве зависимости модуля Go с помощью go get github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Go/v26. Требуется Go 1.24 или более поздняя версия.
Нет. go.mod объявляет отсутствие записей require — библиотека построена полностью на стандартной библиотеке Go.
Да. StreamingReader.ProcessRows читает лист строка за строкой через обратный вызов, избегая полной загрузки в память.