Golang 创建 Excel 文件

avatar
作者
筋斗云
阅读量:0

经常会遇到需要导出数据报表的需求,除了可以通过 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) } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!