68 lines
1.2 KiB
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
|
|
}
|