56 lines
945 B
Go
56 lines
945 B
Go
package encoder
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/360EntSecGroup-Skylar/excelize/v2"
|
|
)
|
|
|
|
type (
|
|
excelizeEncoder struct {
|
|
row int
|
|
f *excelize.File
|
|
w io.Writer
|
|
ff []field
|
|
u userFinder
|
|
tz string
|
|
}
|
|
)
|
|
|
|
func NewExcelizeEncoder(w io.Writer, header bool, u userFinder, tz string, ff ...field) *excelizeEncoder {
|
|
enc := &excelizeEncoder{
|
|
f: excelize.NewFile(),
|
|
w: w,
|
|
ff: preprocessHeader(ff, tz),
|
|
u: u,
|
|
tz: tz,
|
|
}
|
|
|
|
if header {
|
|
enc.writeHeader()
|
|
}
|
|
|
|
return enc
|
|
}
|
|
|
|
func (enc *excelizeEncoder) Flush() {
|
|
_ = enc.f.Write(enc.w)
|
|
}
|
|
|
|
// Returns current row + column to alphanumeric cell name
|
|
func (enc excelizeEncoder) pos(col int) string {
|
|
cn, _ := excelize.CoordinatesToCellName(col, enc.row)
|
|
return cn
|
|
}
|
|
|
|
func (enc excelizeEncoder) sheet() string {
|
|
return "Sheet1"
|
|
}
|
|
|
|
func (enc *excelizeEncoder) writeHeader() {
|
|
enc.row++
|
|
for p := range enc.ff {
|
|
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p+1), enc.ff[p].name)
|
|
}
|
|
}
|