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 }