diff --git a/export/xlsx.go b/export/xlsx.go index 4fd0730..198fe7f 100644 --- a/export/xlsx.go +++ b/export/xlsx.go @@ -1,7 +1,9 @@ package export import ( + "bytes" "fmt" + "io" "reflect" "strconv" "strings" @@ -47,6 +49,20 @@ func (e *Exporter) newSheet() error { } func (e *Exporter) Export(sheetIndex int) error { + if err := e.export(sheetIndex); err != nil { + return err + } + return e.Save() +} + +func (e *Exporter) ExportBuffer(sheetIndex int) (io.Writer, error) { + if err := e.export(sheetIndex); err != nil { + return nil, err + } + return e.SaveBuffer() +} + +func (e *Exporter) export(sheetIndex int) error { if len(e.Sheets) == 0 { return fmt.Errorf("excel file has no sheet") } @@ -76,7 +92,7 @@ func (e *Exporter) Export(sheetIndex int) error { default: return fmt.Errorf("data must be slice or struct") } - return e.Save() + return nil } func (e *Exporter) dealElement(sheet string, data reflect.Value) { @@ -200,3 +216,13 @@ func (e *Exporter) Save() error { defer e.xlsx.Close() return e.xlsx.SaveAs(fmt.Sprintf("%s/%s", e.Path, e.File)) } + +func (e *Exporter) SaveBuffer() (io.Writer, error) { + defer e.xlsx.Close() + var buffer bytes.Buffer + err := e.xlsx.Write(&buffer) + if err != nil { + return nil, err + } + return &buffer, nil +} diff --git a/export1_test.go b/export1_test.go index b82f9da..268ff40 100644 --- a/export1_test.go +++ b/export1_test.go @@ -149,5 +149,10 @@ func TestMain(t *testing.T) { exporter.Titles = title exporter.File = "test1.xlsx" exporter.Path = "./" - exporter.Export(0) + // exporter.Export(0) + buffer, err := exporter.ExportBuffer(0) + if err != nil { + fmt.Println(err) + } + fmt.Println(buffer) }