file.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package excelize
  2. import (
  3. "archive/zip"
  4. "bytes"
  5. "os"
  6. )
  7. // CreateFile provide function to create new file by default template
  8. // For example:
  9. // xlsx := CreateFile()
  10. func CreateFile() map[string]string {
  11. file := make(map[string]string)
  12. file = saveFileList(file, `_rels/.rels`, templateRels)
  13. file = saveFileList(file, `docProps/app.xml`, templateDocpropsApp)
  14. file = saveFileList(file, `docProps/core.xml`, templateDocpropsCore)
  15. file = saveFileList(file, `xl/_rels/workbook.xml.rels`, templateWorkbookRels)
  16. file = saveFileList(file, `xl/theme/theme1.xml`, templateTheme)
  17. file = saveFileList(file, `xl/worksheets/sheet1.xml`, templateSheet)
  18. file = saveFileList(file, `xl/styles.xml`, templateStyles)
  19. file = saveFileList(file, `xl/workbook.xml`, templateWorkbook)
  20. file = saveFileList(file, `[Content_Types].xml`, templateContentTypes)
  21. return file
  22. }
  23. // Save after create or update to an xlsx file at the provided path.
  24. func Save(files map[string]string, name string) error {
  25. buf := new(bytes.Buffer)
  26. w := zip.NewWriter(buf)
  27. for path, content := range files {
  28. f, err := w.Create(path)
  29. if err != nil {
  30. return err
  31. }
  32. _, err = f.Write([]byte(content))
  33. if err != nil {
  34. return err
  35. }
  36. }
  37. err := w.Close()
  38. if err != nil {
  39. return err
  40. }
  41. f, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
  42. if err != nil {
  43. return err
  44. }
  45. buf.WriteTo(f)
  46. return err
  47. }