自学内容网 自学内容网

Golang 创建 Excel 文件

经常会遇到需要导出数据报表的需求,除了可以通过 encoding/csv 导出 CSV 以外,还可以使用
https://github.com/qax-os/excelize 导出 xlsx 等格式的 excel,下面封装了一个方法,支持多 sheet 的 excel 数据生成,导出按需在接口实现层添加 f.SaveAs("xxx.xlsx") 即可

package excel

import (
"fmt"

"github.com/xuri/excelize/v2"
)

type SheetData struct {
SheetName string
Headers   []string
Rows      [][]interface{}
}

// GenerateExcelBySheets 生成 excel 表格
func GenerateExcelBySheets(sheets []SheetData) (*excelize.File, error) {
f := excelize.NewFile()

for _, sheet := range sheets {
if _, err := f.NewSheet(sheet.SheetName); err != nil {
return nil, err
}

for i, header := range sheet.Headers {
if err := f.SetCellValue(sheet.SheetName, GetCellName(i, 1), header); err != nil {
return nil, err
}
}

baseIndex := 2
if len(sheet.Headers) == 0 {
baseIndex = 1
}

for i, row := range sheet.Rows {
for j, val := range row {
if err := f.SetCellValue(sheet.SheetName, GetCellName(j, baseIndex+i), val); err != nil {
return nil, err
}
}
}
}

if len(sheets) > 0 {
f.SetActiveSheet(0)
}

return f, nil
}

// GetColumnName 获取列名 A-Z, AA-ZZ, AAA-ZZZ
func GetColumnName(col int) string {
if col < 26 {
return string(rune('A' + col))
}

return GetColumnName(col/26-1) + GetColumnName(col%26)
}

// GetCellName 获取单元格名称 A1, B2, AA1, AB1
func GetCellName(col, row int) string {
return fmt.Sprintf("%s%d", GetColumnName(col), row)
}

原文地址:https://blog.csdn.net/MachineRandy/article/details/140530825

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!