在⽇常⼯作中,经常会有导出 excel 表格的功能,下⾯我们就简单的使⽤ Excelize 来导出 excel ⽂件。
Excelize 是 Go 语⾔编写的⽤于操作 Office Excel ⽂档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使⽤它来读取、写⼊由 Microsoft Excel™ 2007 及以上版本创建的电⼦表格⽂档。⽀持 XLSX / XLSM / XLTM / XLTX 等多种⽂档格式,⾼度兼容带有样式、图⽚(表)、透视表、切⽚器等复杂组件的⽂档,并提供流式读写 API,⽤于处理包含⼤规模数据的⼯作簿。可应⽤于各类报表平台、云计算、边缘计算等系统。使⽤本类库要求使⽤的 Go 语⾔为 1.15 或更⾼版本。 github:
⽂档:
安装
go get github.com/xuri/excelize
// 如果使⽤ Go Modules 管理软件包,可以⽤下⾯的命令来安装最新版本go get github.com/xuri/excelize/v2
创建 Excel ⽂档
f := excelize.NewFile()// 设置单元格的值// 这⾥设置表头
f.SetCellValue(\"Sheet1\", \"A1\", \"序号\")f.SetCellValue(\"Sheet1\", \"B1\", \"名称\")line := 1
fruits := getFruits()// 循环写⼊数据
for _, v := range fruits { line++
f.SetCellValue(\"Sheet1\", fmt.Sprintf(\"A%d\", line), v.ID) f.SetCellValue(\"Sheet1\", fmt.Sprintf(\"B%d\", line), v.Name)}
// 保存⽂件
if err := f.SaveAs(\"fruits.xlsx\"); err != nil { fmt.Println(err)}
导出的⽂件内容是:
设置⼯作簿的列宽和⾏⾼
// 设置列宽
f.SetColWidth(\"Sheet1\", \"A\", \"C\", 20)// 设置表头⾏⾼
f.SetRowHeight(\"Sheet1\", 1, 30)
这样并不好看,接下来继续设置单元格样式
设置单元格样式
1.设置表头字体加粗、⽂字⽔平并且垂直居中、字体、颜⾊。2.设置⾏的字体样式默认是⽔平垂直居中,但是单价列的值必须靠左
下⾯是实现代码
// 设置表头样式
headStyleID, _ := f.NewStyle(`{ \"font\":{
\"color\":\"#333333\", \"bold\":true, \"size\":16,
\"family\":\"arial\" },
\"alignment\":{
\"vertical\":\"center\", \"horizontal\":\"center\" }}`)
// 设置⾏样式
rowStyleID, _ := f.NewStyle(`{ \"font\":{
\"color\":\"#666666\", \"size\":13,
\"family\":\"arial\" },
\"alignment\":{
\"vertical\":\"center\", \"horizontal\":\"center\" }}`)
f.SetCellStyle(\"Sheet1\", \"A1\", \"C1\", headStyleID)textLeftStyleID, _ := f.NewStyle(`{ \"alignment\":{
\"horizontal\":\"left\" }}`)
for _, v := range fruits { line++
f.SetCellValue(\"Sheet1\", fmt.Sprintf(\"A%d\", line), v.ID) f.SetCellValue(\"Sheet1\", fmt.Sprintf(\"B%d\", line), v.Name) f.SetCellValue(\"Sheet1\", fmt.Sprintf(\"C%d\", line), v.Price)
// 设置⾏样式
f.SetCellStyle(\"Sheet1\", fmt.Sprintf(\"A%d\", line), fmt.Sprintf(\"C%d\", line), rowStyleID) f.SetCellStyle(\"Sheet1\", fmt.Sprintf(\"C%d\", line), fmt.Sprintf(\"C%d\", line), textLeftStyleID)}结果:
表格数据源
type fruit struct { ID uint
Name string Price float64}
func getFruits() []*fruit { return []*fruit{ &fruit{ ID: 1,
Name: \"苹果\", Price: 8, },
&fruit{ ID: 2,
Name: \"雪梨\", Price: 5, },
&fruit{ ID: 3,
Name: \"⾹蕉\", Price: 3, }, }}
简单粗暴的贴代码。。。希望有点帮助
因篇幅问题不能全部显示,请点此查看更多更全内容