summaryrefslogtreecommitdiff
path: root/file.go
diff options
context:
space:
mode:
authorRi Xu <xuri.me@gmail.com>2016-09-05 16:37:15 +0800
committerRi Xu <xuri.me@gmail.com>2016-09-05 16:37:15 +0800
commit50863294f9d6f2ecc399d06f1b3c2312c4bdce10 (patch)
tree0cc7513dd3c56eef889432f27da1186288a2ed98 /file.go
parent956a4627d1f2b78172eaaf6078209d4cf8e64ce2 (diff)
Fix issue #2 change project to object-oriented style and update readme file.
Diffstat (limited to 'file.go')
-rw-r--r--file.go60
1 files changed, 44 insertions, 16 deletions
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
}