file.go 1.7 KB

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