file.go 1.3 KB

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