Ad XLSX exporting capabilities

This commit is contained in:
Denis Arh
2019-08-15 16:43:25 +02:00
parent 5423cf43c8
commit af4d15e262
61 changed files with 16600 additions and 1 deletions
+50
View File
@@ -1 +1,51 @@
package encoder
import (
"io"
"github.com/360EntSecGroup-Skylar/excelize"
)
type (
excelizeEncoder struct {
row int
f *excelize.File
w io.Writer
ff []field
}
)
func NewExcelizeEncoder(w io.Writer, header bool, ff ...field) *excelizeEncoder {
enc := &excelizeEncoder{
f: excelize.NewFile(),
w: w,
ff: ff,
}
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)
}
}
+37
View File
@@ -126,3 +126,40 @@ func (enc structuredEncoder) Record(r *types.Record) error {
return enc.w.Encode(out)
}
func (enc *excelizeEncoder) Record(r *types.Record) error {
enc.row++
for p, f := range enc.ff {
p++
switch f.name {
case "recordID", "ID":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtUint64(r.ID))
case "moduleID":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtUint64(r.ModuleID))
case "namespaceID":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtUint64(r.NamespaceID))
case "ownedBy":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtUint64(r.OwnedBy))
case "createdBy":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtUint64(r.CreatedBy))
case "createdAt":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtTime(&r.CreatedAt))
case "updatedBy":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtUint64(r.UpdatedBy))
case "updatedAt":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtTime(r.UpdatedAt))
case "deletedBy":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtUint64(r.DeletedBy))
case "deletedAt":
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), fmtTime(r.DeletedAt))
default:
vv := r.Values.FilterByName(f.name)
if len(vv) > 0 {
_ = enc.f.SetCellStr(enc.sheet(), enc.pos(p), vv[0].Value)
}
}
}
return nil
}