file.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package excelize
  2. import (
  3. "archive/zip"
  4. "bytes"
  5. "fmt"
  6. "os"
  7. )
  8. // Create a new xlsx file
  9. //
  10. // For example:
  11. //
  12. // xlsx := CreateFile()
  13. //
  14. func CreateFile() []FileList {
  15. var file []FileList
  16. file = saveFileList(file, `_rels/.rels`, TEMPLATE_RELS)
  17. file = saveFileList(file, `docProps/app.xml`, TEMPLATE_DOCPROPS_APP)
  18. file = saveFileList(file, `docProps/core.xml`, TEMPLATE_DOCPROPS_CORE)
  19. file = saveFileList(file, `xl/_rels/workbook.xml.rels`, TEMPLATE_WORKBOOK_RELS)
  20. file = saveFileList(file, `xl/theme/theme1.xml`, TEMPLATE_THEME)
  21. file = saveFileList(file, `xl/worksheets/sheet1.xml`, TEMPLATE_SHEET)
  22. file = saveFileList(file, `xl/styles.xml`, TEMPLATE_STYLES)
  23. file = saveFileList(file, `xl/workbook.xml`, TEMPLATE_WORKBOOK)
  24. file = saveFileList(file, `[Content_Types].xml`, TEMPLATE_CONTENT_TYPES)
  25. return file
  26. }
  27. // Save after create or update to an xlsx file at the provided path.
  28. func Save(files []FileList, name string) error {
  29. buf := new(bytes.Buffer)
  30. w := zip.NewWriter(buf)
  31. for _, file := range files {
  32. f, err := w.Create(file.Key)
  33. if err != nil {
  34. fmt.Println(err)
  35. }
  36. _, err = f.Write([]byte(file.Value))
  37. if err != nil {
  38. return err
  39. }
  40. }
  41. err := w.Close()
  42. if err != nil {
  43. return err
  44. }
  45. f, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
  46. if err != nil {
  47. return err
  48. }
  49. buf.WriteTo(f)
  50. return err
  51. }