sheet_test.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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 TestSearchSheet(t *testing.T) {
  100. f, err := excelize.OpenFile(filepath.Join("test", "SharedStrings.xlsx"))
  101. if !assert.NoError(t, err) {
  102. t.FailNow()
  103. }
  104. // Test search in a not exists worksheet.
  105. _, err = f.SearchSheet("Sheet4", "")
  106. assert.EqualError(t, err, "sheet Sheet4 is not exist")
  107. var expected []string
  108. // Test search a not exists value.
  109. result, err := f.SearchSheet("Sheet1", "X")
  110. assert.NoError(t, err)
  111. assert.EqualValues(t, expected, result)
  112. result, err = f.SearchSheet("Sheet1", "A")
  113. assert.NoError(t, err)
  114. assert.EqualValues(t, []string{"A1"}, result)
  115. // Test search the coordinates where the numerical value in the range of
  116. // "0-9" of Sheet1 is described by regular expression:
  117. result, err = f.SearchSheet("Sheet1", "[0-9]", true)
  118. assert.NoError(t, err)
  119. assert.EqualValues(t, expected, result)
  120. }
  121. func TestSetPageLayout(t *testing.T) {
  122. f := excelize.NewFile()
  123. // Test set page layout on not exists worksheet.
  124. assert.EqualError(t, f.SetPageLayout("SheetN"), "sheet SheetN is not exist")
  125. }
  126. func TestGetPageLayout(t *testing.T) {
  127. f := excelize.NewFile()
  128. // Test get page layout on not exists worksheet.
  129. assert.EqualError(t, f.GetPageLayout("SheetN"), "sheet SheetN is not exist")
  130. }
  131. func TestSetHeaderFooter(t *testing.T) {
  132. f := excelize.NewFile()
  133. f.SetCellStr("Sheet1", "A1", "Test SetHeaderFooter")
  134. // Test set header and footer on not exists worksheet.
  135. assert.EqualError(t, f.SetHeaderFooter("SheetN", nil), "sheet SheetN is not exist")
  136. // Test set header and footer with illegal setting.
  137. assert.EqualError(t, f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{
  138. OddHeader: strings.Repeat("c", 256),
  139. }), "field OddHeader must be less than 255 characters")
  140. assert.NoError(t, f.SetHeaderFooter("Sheet1", nil))
  141. assert.NoError(t, f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{
  142. DifferentFirst: true,
  143. DifferentOddEven: true,
  144. OddHeader: "&R&P",
  145. OddFooter: "&C&F",
  146. EvenHeader: "&L&P",
  147. EvenFooter: "&L&D&R&T",
  148. FirstHeader: `&CCenter &"-,Bold"Bold&"-,Regular"HeaderU+000A&D`,
  149. }))
  150. assert.NoError(t, f.SaveAs(filepath.Join("test", "TestSetHeaderFooter.xlsx")))
  151. }
  152. func TestDefinedName(t *testing.T) {
  153. f := excelize.NewFile()
  154. assert.NoError(t, f.SetDefinedName(&excelize.DefinedName{
  155. Name: "Amount",
  156. RefersTo: "Sheet1!$A$2:$D$5",
  157. Comment: "defined name comment",
  158. Scope: "Sheet1",
  159. }))
  160. assert.NoError(t, f.SetDefinedName(&excelize.DefinedName{
  161. Name: "Amount",
  162. RefersTo: "Sheet1!$A$2:$D$5",
  163. Comment: "defined name comment",
  164. }))
  165. assert.EqualError(t, f.SetDefinedName(&excelize.DefinedName{
  166. Name: "Amount",
  167. RefersTo: "Sheet1!$A$2:$D$5",
  168. Comment: "defined name comment",
  169. }), "the same name already exists on scope")
  170. assert.Exactly(t, "Sheet1!$A$2:$D$5", f.GetDefinedName()[1].RefersTo)
  171. assert.NoError(t, f.SaveAs(filepath.Join("test", "TestDefinedName.xlsx")))
  172. }