119 lines
2.6 KiB
Go
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
|
|
}
|