file.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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() *File {
  11. file := make(map[string]string)
  12. file[`_rels/.rels`] = templateRels
  13. file[`docProps/app.xml`] = templateDocpropsApp
  14. file[`docProps/core.xml`] = templateDocpropsCore
  15. file[`xl/_rels/workbook.xml.rels`] = templateWorkbookRels
  16. file[`xl/theme/theme1.xml`] = templateTheme
  17. file[`xl/worksheets/sheet1.xml`] = templateSheet
  18. file[`xl/styles.xml`] = templateStyles
  19. file[`xl/workbook.xml`] = templateWorkbook
  20. file[`[Content_Types].xml`] = templateContentTypes
  21. return &File{
  22. XLSX: file,
  23. }
  24. }
  25. // Save provide function override the xlsx file with origin path.
  26. func (f *File) Save() error {
  27. buf := new(bytes.Buffer)
  28. w := zip.NewWriter(buf)
  29. for path, content := range f.XLSX {
  30. f, err := w.Create(path)
  31. if err != nil {
  32. return err
  33. }
  34. _, err = f.Write([]byte(content))
  35. if err != nil {
  36. return err
  37. }
  38. }
  39. err := w.Close()
  40. if err != nil {
  41. return err
  42. }
  43. file, err := os.OpenFile(f.Path, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
  44. if err != nil {
  45. return err
  46. }
  47. buf.WriteTo(file)
  48. return err
  49. }
  50. // WriteTo provide function create or update to an xlsx file at the provided path.
  51. func (f *File) WriteTo(name string) error {
  52. buf := new(bytes.Buffer)
  53. w := zip.NewWriter(buf)
  54. for path, content := range f.XLSX {
  55. f, err := w.Create(path)
  56. if err != nil {
  57. return err
  58. }
  59. _, err = f.Write([]byte(content))
  60. if err != nil {
  61. return err
  62. }
  63. }
  64. err := w.Close()
  65. if err != nil {
  66. return err
  67. }
  68. file, err := os.OpenFile(name, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
  69. if err != nil {
  70. return err
  71. }
  72. buf.WriteTo(file)
  73. return err
  74. }