Это 7-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов
Создание документов Excel на основе данных является очень распространенным требованием. В этой статье рассказывается, как использовать GoExcelizeБиблиотека для создания документов Excel, а также реализация кода в некоторых конкретных сценариях.
О библиотеке Excelize
Excelize
Это базовая библиотека для работы с документами Office Excel, написанными на языке Go и основанная на международном стандарте ECMA-376, ISO/IEC 29500. Его можно использовать для чтения и записи электронных таблиц, созданных с помощью Microsoft Excel™ 2007 и более поздних версий. Поддерживает несколько форматов документов, таких как XLSX / XLSM / XLTM / XLTX, обладает высокой совместимостью с документами со сложными компонентами, такими как стили, изображения (таблицы), сводные таблицы, слайсеры и т. д., и предоставляет API-интерфейсы потокового чтения и записи для обработки больших объемов данных. масштаб книги данных. Его можно применять к различным платформам отчетности, облачным вычислениям, граничным вычислениям и другим системам. Для использования этой библиотеки требуется язык Go версии 1.15 или выше.
Сравнение производительности
На следующем рисунке показано сравнение производительности некоторых основных библиотек Excel с открытым исходным кодом при создании простых текстовых матриц 12800*50 (ОС: macOS Mojave версии 10.14.4, ЦП: Intel Core i5 3,4 ГГц, ОЗУ: 16 ГБ 2400 МГц DDR4, жесткий диск: 1 ТБ), включая Go, Python, Java, PHP и NodeJS.
Установить
Последняя версияv2.4.0
:
go get github.com/360EntSecGroup-Skylar/excelize/v2
Создать документ Excel
В следующем примере мы создаем документ Excel и используемNewSheet
метод создает новыйSheet2
рабочий лист,Sheet1
рабочий лист, созданный по умолчанию, тогда мы используемSetCellValue
методы находятся вSheet2
рабочий листA2
клетки иSheet1
табличныйB2
ячейку, чтобы установить значение, и с помощьюSetActiveSheet
настройки методаSheet2
Рабочий лист является рабочим листом по умолчанию, который, наконец, называетсяSaveAs
Метод записывает данные в документ Excel:
package main
import (
"fmt"
"github.com/360EntSecGroup-Skylar/excelize/v2"
)
func main() {
f := excelize.NewFile()
// 创建一个工作表
index := f.NewSheet("Sheet2")
// 设置单元格的值
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)
}
}
Реальное воспроизведение сцены
Создать рабочий лист
Имена листов чувствительны к регистру:
index := f.NewSheet("Sheet2")
Удалить созданный по умолчанию рабочий лист
Документ Excel, созданный по умолчанию, содержит файл с именемSheet1
Рабочий лист, нам может не понадобиться этот рабочий лист по умолчанию, в настоящее время мы можем удалить этот рабочий лист:
f.DeleteSheet("Sheet1")
Объединить ячейки
сливатьсяSheet1
рабочий листF1:I2
Ячейки в диапазоне:
excel.MergeCell("Sheet1", "F1", "I2")
сотовый стиль
Часто встречается при настройке стилей для ячеек, например при установке цвета фона ячеек,Excelize
Библиотека предоставляет следующие два метода для установки стилей ячеек (NewStyle
иSetCellStyle
):
// 通过给定的样式格式 JSON 或结构体的指针创建样式并返回样式索引。
// 请注意,颜色需要使用 RGB 色域代码表示。
style, err := f.NewStyle(`{
"border": [
{
"type": "left",
"color": "0000FF",
"style": 3
},
{
"type": "top",
"color": "00FF00",
"style": 4
},
{
"type": "bottom",
"color": "FFFF00",
"style": 5
},
{
"type": "right",
"color": "FF0000",
"style": 6
},
{
"type": "diagonalDown",
"color": "A020F0",
"style": 7
},
{
"type": "diagonalUp",
"color": "A020F0",
"style": 8
}]
}`)
if err != nil {
fmt.Println(err)
}
err = f.SetCellStyle("Sheet1", "D7", "D7", style)
текст горизонтально по центру
Необходимо использовать горизонтальное центрирование текста.Alignment
структура стиля:
type Alignment struct {
Horizontal string `json:"horizontal"`
Indent int `json:"indent"`
JustifyLastLine bool `json:"justify_last_line"`
ReadingOrder uint64 `json:"reading_order"`
RelativeIndent int `json:"relative_indent"`
ShrinkToFit bool `json:"shrink_to_fit"`
TextRotation int `json:"text_rotation"`
Vertical string `json:"vertical"`
WrapText bool `json:"wrap_text"`
}
Центрировать по горизонтали, пока установленоHorizontal
значениеcenter
Просто:
style, err := f.NewStyle(`{"alignment":{"horizontal":"center"}}`)
if err != nil {
fmt.Println(err)
}
err = excel.SetCellStyle("Sheet1", "B1", "B1", style)
Установить заливку сплошным цветом для ячейки
Заполнение ячеек цветом будет использоватьFill
структура стиля:
type Fill struct {
Type string `json:"type"`
Pattern int `json:"pattern"`
Color []string `json:"color"`
Shading int `json:"shading"`
}
Структура стиля
Из кода, который устанавливает стили выше, мы можем найти, чтоborder
это массив, иalignment
представляет собой структуру, состоящую изStyle
Структура определяет:
type Style struct {
Border []Border `json:"border"`
Fill Fill `json:"fill"`
Font *Font `json:"font"`
Alignment *Alignment `json:"alignment"`
Protection *Protection `json:"protection"`
NumFmt int `json:"number_format"`
DecimalPlaces int `json:"decimal_places"`
CustomNumFmt *string `json:"custom_number_format"`
Lang string `json:"lang"`
NegRed bool `json:"negred"`
}