zky_mandate/library/libUtils/excel_helper.go
2023-08-18 15:42:14 +08:00

119 lines
2.6 KiB
Go

package libUtils
import (
"errors"
"fmt"
"github.com/xuri/excelize/v2"
)
const (
ExcelHelperRowLimit = 65536
ExcelHelperColLimit = 256
)
type ExcelHelper struct{}
type ExcelHelperFile struct {
*excelize.File
err error
}
func (helperFile *ExcelHelperFile) MapToExcel(sheet string, cells map[string]interface{}) *ExcelHelperFile {
if helperFile.err != nil {
return helperFile
}
for axis, item := range cells {
err := helperFile.File.SetCellValue(sheet, axis, item)
if err != nil {
helperFile.err = err
return helperFile
}
}
return helperFile
}
func (helperFile *ExcelHelperFile) SetCellBorder(sheet, hcell, vcell string) *ExcelHelperFile {
style, err := helperFile.File.NewStyle(&excelize.Style{
Border: []excelize.Border{
{Type: "left", Color: "#000000", Style: 1},
{Type: "top", Color: "#000000", Style: 1},
{Type: "bottom", Color: "#000000", Style: 1},
{Type: "right", Color: "#000000", Style: 1},
},
})
if err != nil {
helperFile.err = err
return helperFile
}
_ = helperFile.File.SetCellStyle(sheet, hcell, vcell, style)
return helperFile
}
func (helperFile *ExcelHelperFile) ArrToExcel(sheet string, axis string, rows [][]interface{}) *ExcelHelperFile {
if helperFile.err != nil {
return helperFile
}
rowNum := len(rows)
if rowNum == 0 {
helperFile.err = errors.New("没有需要导出的数据")
return helperFile
}
if rowNum > ExcelHelperRowLimit {
helperFile.err = errors.New(fmt.Sprintf("导出数据行数超过%d", ExcelHelperRowLimit))
return helperFile
}
colNum := len(rows[0])
if colNum > ExcelHelperColLimit {
helperFile.err = errors.New(fmt.Sprintf("导出数据列数超过%d", ExcelHelperColLimit))
return helperFile
}
axisCol, axisRow, err := excelize.SplitCellName(axis)
if err != nil {
helperFile.err = err
return helperFile
}
for index, item := range rows {
cell, _ := excelize.JoinCellName(axisCol, index+axisRow)
err = helperFile.File.SetSheetRow(sheet, cell, &item)
if err != nil {
helperFile.err = err
return helperFile
}
}
return helperFile
}
func (helperFile *ExcelHelperFile) SaveByPath(path string) (savePath string, err error) {
if helperFile.err != nil {
return "", helperFile.err
}
path = path + ".xlsx"
err = helperFile.File.SaveAs(path)
if err != nil {
return
}
return path, nil
}
func (excel *ExcelHelper) OpenFile(tplPath string) (file *ExcelHelperFile, err error) {
temp, err := excelize.OpenFile(tplPath)
if err != nil {
return
}
file = &ExcelHelperFile{
File: temp,
}
return
}
func (excel *ExcelHelper) CreateFile() (file *ExcelHelperFile) {
f := excelize.NewFile()
file = &ExcelHelperFile{
File: f,
}
return
}