cellmerged_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package excelize
  2. import (
  3. "path/filepath"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func TestMergeCell(t *testing.T) {
  8. f, err := OpenFile(filepath.Join("test", "Book1.xlsx"))
  9. if !assert.NoError(t, err) {
  10. t.FailNow()
  11. }
  12. assert.EqualError(t, f.MergeCell("Sheet1", "A", "B"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
  13. assert.NoError(t, f.MergeCell("Sheet1", "D9", "D9"))
  14. assert.NoError(t, f.MergeCell("Sheet1", "D9", "E9"))
  15. assert.NoError(t, f.MergeCell("Sheet1", "H14", "G13"))
  16. assert.NoError(t, f.MergeCell("Sheet1", "C9", "D8"))
  17. assert.NoError(t, f.MergeCell("Sheet1", "F11", "G13"))
  18. assert.NoError(t, f.MergeCell("Sheet1", "H7", "B15"))
  19. assert.NoError(t, f.MergeCell("Sheet1", "D11", "F13"))
  20. assert.NoError(t, f.MergeCell("Sheet1", "G10", "K12"))
  21. f.SetCellValue("Sheet1", "G11", "set value in merged cell")
  22. f.SetCellInt("Sheet1", "H11", 100)
  23. f.SetCellValue("Sheet1", "I11", float64(0.5))
  24. f.SetCellHyperLink("Sheet1", "J11", "https://github.com/360EntSecGroup-Skylar/excelize", "External")
  25. f.SetCellFormula("Sheet1", "G12", "SUM(Sheet1!B19,Sheet1!C19)")
  26. f.GetCellValue("Sheet1", "H11")
  27. f.GetCellValue("Sheet2", "A6") // Merged cell ref is single coordinate.
  28. f.GetCellFormula("Sheet1", "G12")
  29. f.NewSheet("Sheet3")
  30. assert.NoError(t, f.MergeCell("Sheet3", "D11", "F13"))
  31. assert.NoError(t, f.MergeCell("Sheet3", "G10", "K12"))
  32. assert.NoError(t, f.MergeCell("Sheet3", "B1", "D5")) // B1:D5
  33. assert.NoError(t, f.MergeCell("Sheet3", "E1", "F5")) // E1:F5
  34. assert.NoError(t, f.MergeCell("Sheet3", "H2", "I5"))
  35. assert.NoError(t, f.MergeCell("Sheet3", "I4", "J6")) // H2:J6
  36. assert.NoError(t, f.MergeCell("Sheet3", "M2", "N5"))
  37. assert.NoError(t, f.MergeCell("Sheet3", "L4", "M6")) // L2:N6
  38. assert.NoError(t, f.MergeCell("Sheet3", "P4", "Q7"))
  39. assert.NoError(t, f.MergeCell("Sheet3", "O2", "P5")) // O2:Q7
  40. assert.NoError(t, f.MergeCell("Sheet3", "A9", "B12"))
  41. assert.NoError(t, f.MergeCell("Sheet3", "B7", "C9")) // A7:C12
  42. assert.NoError(t, f.MergeCell("Sheet3", "E9", "F10"))
  43. assert.NoError(t, f.MergeCell("Sheet3", "D8", "G12"))
  44. assert.NoError(t, f.MergeCell("Sheet3", "I8", "I12"))
  45. assert.NoError(t, f.MergeCell("Sheet3", "I10", "K10"))
  46. assert.NoError(t, f.MergeCell("Sheet3", "M8", "Q13"))
  47. assert.NoError(t, f.MergeCell("Sheet3", "N10", "O11"))
  48. // Test get merged cells on not exists worksheet.
  49. assert.EqualError(t, f.MergeCell("SheetN", "N10", "O11"), "sheet SheetN is not exist")
  50. assert.NoError(t, f.SaveAs(filepath.Join("test", "TestMergeCell.xlsx")))
  51. f = NewFile()
  52. assert.NoError(t, f.MergeCell("Sheet1", "A2", "B3"))
  53. f.Sheet["xl/worksheets/sheet1.xml"].MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{nil, nil}}
  54. assert.NoError(t, f.MergeCell("Sheet1", "A2", "B3"))
  55. f.Sheet["xl/worksheets/sheet1.xml"].MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A1"}}}
  56. assert.EqualError(t, f.MergeCell("Sheet1", "A2", "B3"), `invalid area "A1"`)
  57. f.Sheet["xl/worksheets/sheet1.xml"].MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A:A"}}}
  58. assert.EqualError(t, f.MergeCell("Sheet1", "A2", "B3"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
  59. }
  60. func TestGetMergeCells(t *testing.T) {
  61. wants := []struct {
  62. value string
  63. start string
  64. end string
  65. }{{
  66. value: "A1",
  67. start: "A1",
  68. end: "B1",
  69. }, {
  70. value: "A2",
  71. start: "A2",
  72. end: "A3",
  73. }, {
  74. value: "A4",
  75. start: "A4",
  76. end: "B5",
  77. }, {
  78. value: "A7",
  79. start: "A7",
  80. end: "C10",
  81. }}
  82. f, err := OpenFile(filepath.Join("test", "MergeCell.xlsx"))
  83. if !assert.NoError(t, err) {
  84. t.FailNow()
  85. }
  86. sheet1 := f.GetSheetName(1)
  87. mergeCells, err := f.GetMergeCells(sheet1)
  88. if !assert.Len(t, mergeCells, len(wants)) {
  89. t.FailNow()
  90. }
  91. assert.NoError(t, err)
  92. for i, m := range mergeCells {
  93. assert.Equal(t, wants[i].value, m.GetCellValue())
  94. assert.Equal(t, wants[i].start, m.GetStartAxis())
  95. assert.Equal(t, wants[i].end, m.GetEndAxis())
  96. }
  97. // Test get merged cells on not exists worksheet.
  98. _, err = f.GetMergeCells("SheetN")
  99. assert.EqualError(t, err, "sheet SheetN is not exist")
  100. }
  101. func TestUnmergeCell(t *testing.T) {
  102. f, err := OpenFile(filepath.Join("test", "MergeCell.xlsx"))
  103. if !assert.NoError(t, err) {
  104. t.FailNow()
  105. }
  106. sheet1 := f.GetSheetName(1)
  107. xlsx, err := f.workSheetReader(sheet1)
  108. assert.NoError(t, err)
  109. mergeCellNum := len(xlsx.MergeCells.Cells)
  110. assert.EqualError(t, f.UnmergeCell("Sheet1", "A", "A"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
  111. // unmerge the mergecell that contains A1
  112. assert.NoError(t, f.UnmergeCell(sheet1, "A1", "A1"))
  113. if len(xlsx.MergeCells.Cells) != mergeCellNum-1 {
  114. t.FailNow()
  115. }
  116. assert.NoError(t, f.SaveAs(filepath.Join("test", "TestUnmergeCell.xlsx")))
  117. f = NewFile()
  118. assert.NoError(t, f.MergeCell("Sheet1", "A2", "B3"))
  119. // Test unmerged area on not exists worksheet.
  120. assert.EqualError(t, f.UnmergeCell("SheetN", "A1", "A1"), "sheet SheetN is not exist")
  121. f.Sheet["xl/worksheets/sheet1.xml"].MergeCells = nil
  122. assert.NoError(t, f.UnmergeCell("Sheet1", "H7", "B15"))
  123. f.Sheet["xl/worksheets/sheet1.xml"].MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{nil, nil}}
  124. assert.NoError(t, f.UnmergeCell("Sheet1", "H15", "B7"))
  125. f.Sheet["xl/worksheets/sheet1.xml"].MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A1"}}}
  126. assert.EqualError(t, f.UnmergeCell("Sheet1", "A2", "B3"), `invalid area "A1"`)
  127. f.Sheet["xl/worksheets/sheet1.xml"].MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A:A"}}}
  128. assert.EqualError(t, f.UnmergeCell("Sheet1", "A2", "B3"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
  129. }