datavalidation.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package xlsx
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. type DataValidationType int
  7. // Data validation types
  8. const (
  9. _DataValidationType = iota
  10. typeNone //inline use
  11. DataValidationTypeCustom
  12. DataValidationTypeDate
  13. DataValidationTypeDecimal
  14. typeList //inline use
  15. DataValidationTypeTextLeng
  16. DataValidationTypeTime
  17. // DataValidationTypeWhole Integer
  18. DataValidationTypeWhole
  19. )
  20. type DataValidationErrorStyle int
  21. // Data validation error styles
  22. const (
  23. _ DataValidationErrorStyle = iota
  24. StyleStop
  25. StyleWarning
  26. StyleInformation
  27. )
  28. // Data validation error styles
  29. const (
  30. styleStop = "stop"
  31. styleWarning = "warning"
  32. styleInformation = "information"
  33. )
  34. // DataValidationOperator operator enum
  35. type DataValidationOperator int
  36. // Data validation operators
  37. const (
  38. _DataValidationOperator = iota
  39. DataValidationOperatorBetween
  40. DataValidationOperatorEqual
  41. DataValidationOperatorGreaterThan
  42. DataValidationOperatorGreaterThanOrEqual
  43. DataValidationOperatorLessThan
  44. DataValidationOperatorLessThanOrEqual
  45. DataValidationOperatorNotBetween
  46. DataValidationOperatorNotEqual
  47. )
  48. // NewXlsxCellDataValidation return data validation struct
  49. func NewXlsxCellDataValidation(allowBlank, ShowInputMessage, showErrorMessage bool) *xlsxCellDataValidation {
  50. return &xlsxCellDataValidation{
  51. AllowBlank: convBoolToStr(allowBlank),
  52. ShowErrorMessage: convBoolToStr(showErrorMessage),
  53. ShowInputMessage: convBoolToStr(ShowInputMessage),
  54. }
  55. }
  56. // SetError set error notice
  57. func (dd *xlsxCellDataValidation) SetError(style DataValidationErrorStyle, title, msg *string) {
  58. dd.Error = msg
  59. dd.ErrorTitle = title
  60. strStyle := styleStop
  61. switch style {
  62. case StyleStop:
  63. strStyle = styleStop
  64. case StyleWarning:
  65. strStyle = styleWarning
  66. case StyleInformation:
  67. strStyle = styleInformation
  68. }
  69. dd.ErrorStyle = &strStyle
  70. }
  71. // SetInput set prompt notice
  72. func (dd *xlsxCellDataValidation) SetInput(title, msg *string) {
  73. dd.PromptTitle = title
  74. dd.Prompt = msg
  75. }
  76. // SetDropList data validation list
  77. func (dd *xlsxCellDataValidation) SetDropList(keys []string) {
  78. dd.Formula1 = "\"" + strings.Join(keys, ",") + "\""
  79. dd.Type = convDataValidationType(typeList)
  80. }
  81. // SetDropList data validation range
  82. func (dd *xlsxCellDataValidation) SetRange(f1, f2 int, t DataValidationType, o DataValidationOperator) {
  83. formula1 := fmt.Sprintf("%d", f1)
  84. formula2 := fmt.Sprintf("%d", f2)
  85. switch o {
  86. case DataValidationOperatorBetween:
  87. if f1 > f2 {
  88. tmp := formula1
  89. formula1 = formula2
  90. formula2 = tmp
  91. }
  92. case DataValidationOperatorNotBetween:
  93. if f1 > f2 {
  94. tmp := formula1
  95. formula1 = formula2
  96. formula2 = tmp
  97. }
  98. }
  99. dd.Formula1 = formula1
  100. dd.Formula2 = formula2
  101. dd.Type = convDataValidationType(t)
  102. dd.Operator = convDataValidationOperatior(o)
  103. }
  104. // convBoolToStr convert boolean to string , false to 0, true to 1
  105. func convBoolToStr(bl bool) string {
  106. if bl {
  107. return "1"
  108. }
  109. return "0"
  110. }
  111. // convDataValidationType get excel data validation type
  112. func convDataValidationType(t DataValidationType) string {
  113. typeMap := map[DataValidationType]string{
  114. typeNone: "none",
  115. DataValidationTypeCustom: "custom",
  116. DataValidationTypeDate: "date",
  117. DataValidationTypeDecimal: "decimal",
  118. typeList: "list",
  119. DataValidationTypeTextLeng: "textLength",
  120. DataValidationTypeTime: "time",
  121. DataValidationTypeWhole: "whole",
  122. }
  123. return typeMap[t]
  124. }
  125. // convDataValidationOperatior get excel data validation operator
  126. func convDataValidationOperatior(o DataValidationOperator) string {
  127. typeMap := map[DataValidationOperator]string{
  128. DataValidationOperatorBetween: "between",
  129. DataValidationOperatorEqual: "equal",
  130. DataValidationOperatorGreaterThan: "greaterThan",
  131. DataValidationOperatorGreaterThanOrEqual: "greaterThanOrEqual",
  132. DataValidationOperatorLessThan: "lessThan",
  133. DataValidationOperatorLessThanOrEqual: "lessThanOrEqual",
  134. DataValidationOperatorNotBetween: "notBetween",
  135. DataValidationOperatorNotEqual: "notEqual",
  136. }
  137. return typeMap[o]
  138. }