From 370df7541a770b5d86c05f04d7c4fbd88933ddbc Mon Sep 17 00:00:00 2001 From: lj-wsdj <1134294381@qq.com> Date: Wed, 3 Jul 2024 10:12:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=BC=E5=87=BA=E4=B8=BAbu?= =?UTF-8?q?ffer=EF=BC=8C=E4=BB=A5=E4=BE=BF=E4=B8=8A=E4=BC=A0obs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- export/xlsx.go | 28 +++++++++++++++++++++++++++- export1_test.go | 7 ++++++- 2 files changed, 33 insertions(+), 2 deletions(-) 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) }