file.go 1.7 KB
Newer Older
xurime's avatar
xurime 已提交
1 2 3 4 5 6 7 8
package excelize

import (
	"archive/zip"
	"bytes"
	"os"
)

9 10 11 12 13
// CreateFile provides function to create new file by default template. For
// example:
//
//    xlsx := CreateFile()
//
14
func CreateFile() *File {
15
	file := make(map[string]string)
16 17 18 19 20 21 22 23 24
	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
25 26 27 28 29
	return &File{
		XLSX: file,
	}
}

30
// Save provides function to override the xlsx file with origin path.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
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
xurime's avatar
xurime 已提交
54 55
}

56 57
// WriteTo provides function to create or update to an xlsx file at the provided
// path.
58
func (f *File) WriteTo(name string) error {
xurime's avatar
xurime 已提交
59 60
	buf := new(bytes.Buffer)
	w := zip.NewWriter(buf)
61
	for path, content := range f.XLSX {
62
		f, err := w.Create(path)
xurime's avatar
xurime 已提交
63
		if err != nil {
64
			return err
xurime's avatar
xurime 已提交
65
		}
66
		_, err = f.Write([]byte(content))
xurime's avatar
xurime 已提交
67 68 69 70 71 72 73 74
		if err != nil {
			return err
		}
	}
	err := w.Close()
	if err != nil {
		return err
	}
75
	file, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
xurime's avatar
xurime 已提交
76 77 78
	if err != nil {
		return err
	}
79
	buf.WriteTo(file)
xurime's avatar
xurime 已提交
80 81
	return err
}