|
|
package xlsx
|
|
|
|
|
|
import (
|
|
|
"joybuywork/internal/plugins/export"
|
|
|
)
|
|
|
|
|
|
type Option func(e *Export)
|
|
|
|
|
|
// UseDefaultSheet 创建文件开始的默认工作簿
|
|
|
func UseDefaultSheet(name string) Option {
|
|
|
return func(e *Export) {
|
|
|
//旧的默认工作表
|
|
|
index := e.CreateSheet(name)
|
|
|
|
|
|
e.file.SetActiveSheet(index)
|
|
|
|
|
|
//这个是组件自带的,所以删除掉
|
|
|
e.file.DeleteSheet(DefaultSheetName)
|
|
|
e.sheet = name
|
|
|
}
|
|
|
}
|
|
|
|
|
|
type Sheet struct {
|
|
|
Name string //当前sheet的名称
|
|
|
Header export.HeaderField //当前sheet的字段数
|
|
|
SwitchField []SwitchField //切换字段和标识值
|
|
|
Total int64 //当前sheet的写入的总条数,用于自动切sheet,当 SwitchField = nil 的时候才使用该值
|
|
|
writeNum int64 //写入当前sheet的条数
|
|
|
sfIdx int64 //当前sheet从第几行开始写入
|
|
|
fields map[string]string //头部对应的表格列和字段名 map[string]string{"A":"字段key1", "B": "字段key2"}
|
|
|
header map[string]string //表头数据map[string]string{"A1":"表头1", "B1": "表头2"}
|
|
|
}
|
|
|
|
|
|
type SwitchField struct {
|
|
|
Key string //当前sheet的字段标识
|
|
|
Val interface{} //当前sheet的字段标识的值
|
|
|
}
|
|
|
|
|
|
// UseManySheet 多sheet导出
|
|
|
func UseManySheet(ss ...Sheet) Option {
|
|
|
return func(e *Export) {
|
|
|
var defaultIdx = -1
|
|
|
for k, v := range ss {
|
|
|
//工作表存在,代表已经设置过表头,不用再设置了
|
|
|
_ = e.CreateSheet(v.Name)
|
|
|
|
|
|
//初始化
|
|
|
e.initSheet(&v, true)
|
|
|
|
|
|
if defaultIdx == -1 && (v.Total > 0 || v.SwitchField != nil) {
|
|
|
defaultIdx = k
|
|
|
}
|
|
|
|
|
|
//设置他的索引
|
|
|
e.ss = append(e.ss, v)
|
|
|
|
|
|
if v.SwitchField != nil {
|
|
|
if e.sfv == nil {
|
|
|
e.sfv = make(map[string]int)
|
|
|
}
|
|
|
for _, v1 := range v.SwitchField {
|
|
|
e.sfv[e.getSfvKey(v1.Key, v1.Val)] = k
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//从第一个有导出数据的的sheet开始
|
|
|
e.initSheet(&ss[defaultIdx], false)
|
|
|
}
|
|
|
}
|