sheet_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package excelize_test
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "strings"
  6. "testing"
  7. "github.com/360EntSecGroup-Skylar/excelize/v2"
  8. "github.com/mohae/deepcopy"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func ExampleFile_SetPageLayout() {
  12. f := excelize.NewFile()
  13. if err := f.SetPageLayout(
  14. "Sheet1",
  15. excelize.PageLayoutOrientation(excelize.OrientationLandscape),
  16. ); err != nil {
  17. panic(err)
  18. }
  19. if err := f.SetPageLayout(
  20. "Sheet1",
  21. excelize.PageLayoutPaperSize(10),
  22. ); err != nil {
  23. panic(err)
  24. }
  25. // Output:
  26. }
  27. func ExampleFile_GetPageLayout() {
  28. f := excelize.NewFile()
  29. var (
  30. orientation excelize.PageLayoutOrientation
  31. paperSize excelize.PageLayoutPaperSize
  32. )
  33. if err := f.GetPageLayout("Sheet1", &orientation); err != nil {
  34. panic(err)
  35. }
  36. if err := f.GetPageLayout("Sheet1", &paperSize); err != nil {
  37. panic(err)
  38. }
  39. fmt.Println("Defaults:")
  40. fmt.Printf("- orientation: %q\n", orientation)
  41. fmt.Printf("- paper size: %d\n", paperSize)
  42. // Output:
  43. // Defaults:
  44. // - orientation: "portrait"
  45. // - paper size: 1
  46. }
  47. func TestPageLayoutOption(t *testing.T) {
  48. const sheet = "Sheet1"
  49. testData := []struct {
  50. container excelize.PageLayoutOptionPtr
  51. nonDefault excelize.PageLayoutOption
  52. }{
  53. {new(excelize.PageLayoutOrientation), excelize.PageLayoutOrientation(excelize.OrientationLandscape)},
  54. {new(excelize.PageLayoutPaperSize), excelize.PageLayoutPaperSize(10)},
  55. }
  56. for i, test := range testData {
  57. t.Run(fmt.Sprintf("TestData%d", i), func(t *testing.T) {
  58. opt := test.nonDefault
  59. t.Logf("option %T", opt)
  60. def := deepcopy.Copy(test.container).(excelize.PageLayoutOptionPtr)
  61. val1 := deepcopy.Copy(def).(excelize.PageLayoutOptionPtr)
  62. val2 := deepcopy.Copy(def).(excelize.PageLayoutOptionPtr)
  63. f := excelize.NewFile()
  64. // Get the default value
  65. assert.NoError(t, f.GetPageLayout(sheet, def), opt)
  66. // Get again and check
  67. assert.NoError(t, f.GetPageLayout(sheet, val1), opt)
  68. if !assert.Equal(t, val1, def, opt) {
  69. t.FailNow()
  70. }
  71. // Set the same value
  72. assert.NoError(t, f.SetPageLayout(sheet, val1), opt)
  73. // Get again and check
  74. assert.NoError(t, f.GetPageLayout(sheet, val1), opt)
  75. if !assert.Equal(t, val1, def, "%T: value should not have changed", opt) {
  76. t.FailNow()
  77. }
  78. // Set a different value
  79. assert.NoError(t, f.SetPageLayout(sheet, test.nonDefault), opt)
  80. assert.NoError(t, f.GetPageLayout(sheet, val1), opt)
  81. // Get again and compare
  82. assert.NoError(t, f.GetPageLayout(sheet, val2), opt)
  83. if !assert.Equal(t, val1, val2, "%T: value should not have changed", opt) {
  84. t.FailNow()
  85. }
  86. // Value should not be the same as the default
  87. if !assert.NotEqual(t, def, val1, "%T: value should have changed from default", opt) {
  88. t.FailNow()
  89. }
  90. // Restore the default value
  91. assert.NoError(t, f.SetPageLayout(sheet, def), opt)
  92. assert.NoError(t, f.GetPageLayout(sheet, val1), opt)
  93. if !assert.Equal(t, def, val1) {
  94. t.FailNow()
  95. }
  96. })
  97. }
  98. }
  99. func TestSetPageLayout(t *testing.T) {
  100. f := excelize.NewFile()
  101. // Test set page layout on not exists worksheet.
  102. assert.EqualError(t, f.SetPageLayout("SheetN"), "sheet SheetN is not exist")
  103. }
  104. func TestGetPageLayout(t *testing.T) {
  105. f := excelize.NewFile()
  106. // Test get page layout on not exists worksheet.
  107. assert.EqualError(t, f.GetPageLayout("SheetN"), "sheet SheetN is not exist")
  108. }
  109. func TestSetHeaderFooter(t *testing.T) {
  110. f := excelize.NewFile()
  111. f.SetCellStr("Sheet1", "A1", "Test SetHeaderFooter")
  112. // Test set header and footer on not exists worksheet.
  113. assert.EqualError(t, f.SetHeaderFooter("SheetN", nil), "sheet SheetN is not exist")
  114. // Test set header and footer with illegal setting.
  115. assert.EqualError(t, f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{
  116. OddHeader: strings.Repeat("c", 256),
  117. }), "field OddHeader must be less than 255 characters")
  118. assert.NoError(t, f.SetHeaderFooter("Sheet1", nil))
  119. assert.NoError(t, f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{
  120. DifferentFirst: true,
  121. DifferentOddEven: true,
  122. OddHeader: "&R&P",
  123. OddFooter: "&C&F",
  124. EvenHeader: "&L&P",
  125. EvenFooter: "&L&D&R&T",
  126. FirstHeader: `&CCenter &"-,Bold"Bold&"-,Regular"HeaderU+000A&D`,
  127. }))
  128. assert.NoError(t, f.SaveAs(filepath.Join("test", "TestSetHeaderFooter.xlsx")))
  129. }