增加导出-提现记录

This commit is contained in:
2023-11-13 16:22:24 +08:00
parent b0db2dd29a
commit d05ea66f01
7 changed files with 385 additions and 133 deletions
+113 -30
View File
@@ -1,7 +1,11 @@
package utils
import (
"bytes"
"fmt"
"github.com/xuri/excelize/v2"
"reflect"
"strconv"
)
// func Export(widths []int) (bool, error) {
@@ -89,22 +93,24 @@ import (
// return true, nil
// }
// CellData 内容
type CellData struct {
Value interface{} // 值
CellType string // 类型
NumberFmt string // 格式化方式
ColWidth int // 列宽
// HeaderCellData 表头内容
type HeaderCellData struct {
Value string // 值
CellType string // 类型
NumberFmt string // 格式化方式
ColWidth int // 列宽
}
func Export(header []CellData) ([]byte, error) {
func Export(header []HeaderCellData, data []interface{}) (*bytes.Buffer, error) {
sheetName := "Sheet1"
f := excelize.NewFile()
defer func() {
_ = f.Close()
}()
// 创建一个工作表
index, err := f.NewSheet("Sheet1")
index, err := f.NewSheet(sheetName)
if err != nil {
return nil, err
}
@@ -125,7 +131,7 @@ func Export(header []CellData) ([]byte, error) {
}
// 设置行高 35-第一行
err = f.SetRowHeight("Sheet1", 1, 35)
err = f.SetRowHeight(sheetName, 1, 35)
if err != nil {
return nil, err
}
@@ -139,7 +145,7 @@ func Export(header []CellData) ([]byte, error) {
}
// 添加单元格的值
err = f.SetCellValue("Sheet1", colName+"1", cell.Value)
err = f.SetCellValue(sheetName, colName+"1", cell.Value)
if err != nil {
return nil, err
}
@@ -177,37 +183,114 @@ func Export(header []CellData) ([]byte, error) {
Fill: fill, // 背景颜色
Border: border, // 边框
})
err = f.SetCellStyle("Sheet1", colName+"1", colName+"1", style)
if err != nil {
return nil, err
}
}
// 处理工作表设置
for c, cell := range header {
// 获取列名
colName, err := excelize.ColumnNumberToName(c + 1)
err = f.SetCellStyle(sheetName, colName+"1", colName+"1", style)
if err != nil {
return nil, err
}
// 设置列宽
err = f.SetColWidth("Sheet1", colName, colName, float64(cell.ColWidth))
err = f.SetColWidth(sheetName, colName, colName, float64(cell.ColWidth))
if err != nil {
return nil, err
}
}
// 保存文件
if err := f.SaveAs("output.xlsx"); err != nil {
return nil, err
// 设置单元格格式
row := len(data)
for i, cell := range header {
// 获取列名
colName, err := excelize.ColumnNumberToName(i + 1)
if err != nil {
return nil, err
}
// 字体居中
style := &excelize.Style{}
style = &excelize.Style{
Alignment: alignment,
}
if cell.CellType == "float" {
style.NumFmt = 2
customNumFmt := "0.000"
style.CustomNumFmt = &customNumFmt
}
if cell.CellType == "date" {
style.NumFmt = 22
customNumFmt := "yyyy-mm-dd hh:mm:ss"
style.CustomNumFmt = &customNumFmt
}
newStyle, _ := f.NewStyle(style)
err = f.SetCellStyle(sheetName, colName+"2", colName+strconv.Itoa(row), newStyle)
if err != nil {
return nil, err
}
}
// buffer, err := f.WriteToBuffer()
// if err != nil {
// 填充数据
for r, rowData := range data {
rv := reflect.ValueOf(rowData)
for c := 0; c < rv.NumField(); c++ {
cellValue := rv.Field(c).Interface()
// 获取列名
colName, err := excelize.ColumnNumberToName(c + 1)
if err != nil {
return nil, err
}
axis := colName + fmt.Sprintf("%d", r+2)
// 设置单元格值
err = f.SetCellValue(sheetName, axis, cellValue)
if err != nil {
return nil, err
}
// 设置单元格值类型
cellType := header[c].CellType
// 字体居中
style := &excelize.Style{}
style = &excelize.Style{
Alignment: alignment,
}
if cellType == "float" {
style.NumFmt = 2
customNumFmt := "0.000"
style.CustomNumFmt = &customNumFmt
}
if cellType == "date" {
style.NumFmt = 22
customNumFmt := "yyyy-mm-dd hh:mm:ss"
style.CustomNumFmt = &customNumFmt
}
newStyle, _ := f.NewStyle(style)
err = f.SetCellStyle(sheetName, axis, axis, newStyle)
if err != nil {
return nil, err
}
// 设置行高 35-第一行
err = f.SetRowHeight(sheetName, r+2, 35)
if err != nil {
return nil, err
}
}
}
// 保存文件
// if err := f.SaveAs("output.xlsx"); err != nil {
// return nil, err
// }
//
// buffer.Bytes()
return nil, nil
buffer, err := f.WriteToBuffer()
if err != nil {
return nil, err
}
return buffer, nil
}