chart_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package excelize
  2. import (
  3. "bytes"
  4. "encoding/xml"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestChartSize(t *testing.T) {
  9. xlsx := NewFile()
  10. sheet1 := xlsx.GetSheetName(1)
  11. categories := map[string]string{
  12. "A2": "Small",
  13. "A3": "Normal",
  14. "A4": "Large",
  15. "B1": "Apple",
  16. "C1": "Orange",
  17. "D1": "Pear",
  18. }
  19. for cell, v := range categories {
  20. xlsx.SetCellValue(sheet1, cell, v)
  21. }
  22. values := map[string]int{
  23. "B2": 2,
  24. "C2": 3,
  25. "D2": 3,
  26. "B3": 5,
  27. "C3": 2,
  28. "D3": 4,
  29. "B4": 6,
  30. "C4": 7,
  31. "D4": 8,
  32. }
  33. for cell, v := range values {
  34. xlsx.SetCellValue(sheet1, cell, v)
  35. }
  36. xlsx.AddChart("Sheet1", "E4", `{"type":"col3DClustered","dimension":{"width":640, "height":480},`+
  37. `"series":[{"name":"Sheet1!$A$2","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$2:$D$2"},`+
  38. `{"name":"Sheet1!$A$3","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$3:$D$3"},`+
  39. `{"name":"Sheet1!$A$4","categories":"Sheet1!$B$1:$D$1","values":"Sheet1!$B$4:$D$4"}],`+
  40. `"title":{"name":"Fruit 3D Clustered Column Chart"}}`)
  41. var (
  42. buffer bytes.Buffer
  43. )
  44. // Save xlsx file by the given path.
  45. err := xlsx.Write(&buffer)
  46. if !assert.NoError(t, err) {
  47. t.FailNow()
  48. }
  49. newFile, err := OpenReader(&buffer)
  50. if !assert.NoError(t, err) {
  51. t.FailNow()
  52. }
  53. chartsNum := newFile.countCharts()
  54. if !assert.Equal(t, 1, chartsNum, "Expected 1 chart, actual %d", chartsNum) {
  55. t.FailNow()
  56. }
  57. var (
  58. workdir decodeWsDr
  59. anchor decodeTwoCellAnchor
  60. )
  61. content, ok := newFile.XLSX["xl/drawings/drawing1.xml"]
  62. assert.True(t, ok, "Can't open the chart")
  63. err = xml.Unmarshal([]byte(content), &workdir)
  64. if !assert.NoError(t, err) {
  65. t.FailNow()
  66. }
  67. err = xml.Unmarshal([]byte("<decodeTwoCellAnchor>"+
  68. workdir.TwoCellAnchor[0].Content+"</decodeTwoCellAnchor>"), &anchor)
  69. if !assert.NoError(t, err) {
  70. t.FailNow()
  71. }
  72. if !assert.Equal(t, 4, anchor.From.Col, "Expected 'from' column 4") ||
  73. !assert.Equal(t, 3, anchor.From.Row, "Expected 'from' row 3") {
  74. t.FailNow()
  75. }
  76. if !assert.Equal(t, 14, anchor.To.Col, "Expected 'to' column 14") ||
  77. !assert.Equal(t, 27, anchor.To.Row, "Expected 'to' row 27") {
  78. t.FailNow()
  79. }
  80. }