datavalidation_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2016 - 2019 The excelize Authors. All rights reserved. Use of
  2. // this source code is governed by a BSD-style license that can be found in
  3. // the LICENSE file.
  4. //
  5. // Package excelize providing a set of functions that allow you to write to
  6. // and read from XLSX files. Support reads and writes XLSX file generated by
  7. // Microsoft Excel™ 2007 and later. Support save file without losing original
  8. // charts of XLSX. This library needs Go version 1.8 or later.
  9. package excelize
  10. import (
  11. "testing"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestDataValidation(t *testing.T) {
  15. const resultFile = "./test/TestDataValidation.xlsx"
  16. xlsx := NewFile()
  17. dvRange := NewDataValidation(true)
  18. dvRange.Sqref = "A1:B2"
  19. dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorBetween)
  20. dvRange.SetError(DataValidationErrorStyleStop, "error title", "error body")
  21. dvRange.SetError(DataValidationErrorStyleWarning, "error title", "error body")
  22. dvRange.SetError(DataValidationErrorStyleInformation, "error title", "error body")
  23. xlsx.AddDataValidation("Sheet1", dvRange)
  24. if !assert.NoError(t, xlsx.SaveAs(resultFile)) {
  25. t.FailNow()
  26. }
  27. dvRange = NewDataValidation(true)
  28. dvRange.Sqref = "A3:B4"
  29. dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan)
  30. dvRange.SetInput("input title", "input body")
  31. xlsx.AddDataValidation("Sheet1", dvRange)
  32. if !assert.NoError(t, xlsx.SaveAs(resultFile)) {
  33. t.FailNow()
  34. }
  35. dvRange = NewDataValidation(true)
  36. dvRange.Sqref = "A5:B6"
  37. dvRange.SetDropList([]string{"1", "2", "3"})
  38. xlsx.AddDataValidation("Sheet1", dvRange)
  39. if !assert.NoError(t, xlsx.SaveAs(resultFile)) {
  40. t.FailNow()
  41. }
  42. }
  43. func TestDataValidationError(t *testing.T) {
  44. const resultFile = "./test/TestDataValidationError.xlsx"
  45. xlsx := NewFile()
  46. xlsx.SetCellStr("Sheet1", "E1", "E1")
  47. xlsx.SetCellStr("Sheet1", "E2", "E2")
  48. xlsx.SetCellStr("Sheet1", "E3", "E3")
  49. dvRange := NewDataValidation(true)
  50. dvRange.SetSqref("A7:B8")
  51. dvRange.SetSqref("A7:B8")
  52. dvRange.SetSqrefDropList("$E$1:$E$3", true)
  53. err := dvRange.SetSqrefDropList("$E$1:$E$3", false)
  54. assert.EqualError(t, err, "cross-sheet sqref cell are not supported")
  55. xlsx.AddDataValidation("Sheet1", dvRange)
  56. if !assert.NoError(t, xlsx.SaveAs(resultFile)) {
  57. t.FailNow()
  58. }
  59. dvRange = NewDataValidation(true)
  60. dvRange.SetDropList(make([]string, 258))
  61. err = dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan)
  62. assert.EqualError(t, err, "data validation must be 0-255 characters")
  63. xlsx.AddDataValidation("Sheet1", dvRange)
  64. if !assert.NoError(t, xlsx.SaveAs(resultFile)) {
  65. t.FailNow()
  66. }
  67. }