From 50863294f9d6f2ecc399d06f1b3c2312c4bdce10 Mon Sep 17 00:00:00 2001 From: Ri Xu Date: Mon, 5 Sep 2016 16:37:15 +0800 Subject: Fix issue #2 change project to object-oriented style and update readme file. --- file.go | 60 ++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 16 deletions(-) (limited to 'file.go') diff --git a/file.go b/file.go index a25d66d..e3af5ca 100644 --- a/file.go +++ b/file.go @@ -9,25 +9,53 @@ import ( // CreateFile provide function to create new file by default template // For example: // xlsx := CreateFile() -func CreateFile() map[string]string { +func CreateFile() *File { file := make(map[string]string) - file = saveFileList(file, `_rels/.rels`, templateRels) - file = saveFileList(file, `docProps/app.xml`, templateDocpropsApp) - file = saveFileList(file, `docProps/core.xml`, templateDocpropsCore) - file = saveFileList(file, `xl/_rels/workbook.xml.rels`, templateWorkbookRels) - file = saveFileList(file, `xl/theme/theme1.xml`, templateTheme) - file = saveFileList(file, `xl/worksheets/sheet1.xml`, templateSheet) - file = saveFileList(file, `xl/styles.xml`, templateStyles) - file = saveFileList(file, `xl/workbook.xml`, templateWorkbook) - file = saveFileList(file, `[Content_Types].xml`, templateContentTypes) - return file + file[`_rels/.rels`] = templateRels + file[`docProps/app.xml`] = templateDocpropsApp + file[`docProps/core.xml`] = templateDocpropsCore + file[`xl/_rels/workbook.xml.rels`] = templateWorkbookRels + file[`xl/theme/theme1.xml`] = templateTheme + file[`xl/worksheets/sheet1.xml`] = templateSheet + file[`xl/styles.xml`] = templateStyles + file[`xl/workbook.xml`] = templateWorkbook + file[`[Content_Types].xml`] = templateContentTypes + return &File{ + XLSX: file, + } +} + +// Save provide function override the xlsx file with origin path. +func (f *File) Save() error { + buf := new(bytes.Buffer) + w := zip.NewWriter(buf) + for path, content := range f.XLSX { + f, err := w.Create(path) + if err != nil { + return err + } + _, err = f.Write([]byte(content)) + if err != nil { + return err + } + } + err := w.Close() + if err != nil { + return err + } + file, err := os.OpenFile(f.Path, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666) + if err != nil { + return err + } + buf.WriteTo(file) + return err } -// Save after create or update to an xlsx file at the provided path. -func Save(files map[string]string, name string) error { +// WriteTo provide function create or update to an xlsx file at the provided path. +func (f *File) WriteTo(name string) error { buf := new(bytes.Buffer) w := zip.NewWriter(buf) - for path, content := range files { + for path, content := range f.XLSX { f, err := w.Create(path) if err != nil { return err @@ -41,10 +69,10 @@ func Save(files map[string]string, name string) error { if err != nil { return err } - f, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666) + file, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666) if err != nil { return err } - buf.WriteTo(f) + buf.WriteTo(file) return err } -- cgit v1.2.1