excel-export/biz/export/excel_exporter.go

68 lines
1.2 KiB
Go

package export
import (
"fmt"
"log"
)
type ExcelExporter struct {
mFetcher DataFetcher
file FileAdapter
count int
last interface{}
}
func NewExcelExporter(fetcher DataFetcher, file FileAdapter) DataExporter {
return &ExcelExporter{
mFetcher: fetcher,
file: file,
}
}
func (ee *ExcelExporter) Fetcher(fetcher DataFetcher) {
ee.mFetcher = fetcher
}
func (ee *ExcelExporter) File(file FileAdapter) {
ee.file = file
}
func (ee *ExcelExporter) Export(sql, pk string) error {
data, err := ee.mFetcher.Fetch(sql)
if err != nil {
return fmt.Errorf("数据获取错误:%w", err)
}
ee.count = len(data.Data)
//fmt.Printf("Excel Exporter.Excel, got %v data\n", len(data))
//ee.file.Open()
ee.file.WriteTitle(data.Title)
var last []string
for _, val := range data.Data {
last = val
ee.file.Write(last)
}
if len(last) > 0 {
ee.last = last[getPkIndex(data.Title, pk)]
}
//ee.file.Close()
return nil
}
func (ee *ExcelExporter) Last() (int, interface{}) {
return ee.count, ee.last
}
func getPkIndex(titles []string, pk string) int {
if pk == "" {
log.Println("pk is not empty")
return -1
}
for i, title := range titles {
if title == pk {
return i
}
}
return -1
}