summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--datavalidation.go95
1 files changed, 53 insertions, 42 deletions
diff --git a/datavalidation.go b/datavalidation.go
index f1db732..62d2cf8 100644
--- a/datavalidation.go
+++ b/datavalidation.go
@@ -5,16 +5,17 @@ import (
"strings"
)
+// DataValidationType defined the type of data validation.
type DataValidationType int
-// Data validation types
+// Data validation types.
const (
_DataValidationType = iota
- typeNone //inline use
+ typeNone // inline use
DataValidationTypeCustom
DataValidationTypeDate
DataValidationTypeDecimal
- typeList //inline use
+ typeList // inline use
DataValidationTypeTextLeng
DataValidationTypeTime
// DataValidationTypeWhole Integer
@@ -28,9 +29,10 @@ const (
dataValidationFormulaStrLenErr = "data validation must be 0-255 characters"
)
+// DataValidationErrorStyle defined the style of data validation error alert.
type DataValidationErrorStyle int
-// Data validation error styles
+// Data validation error styles.
const (
_ DataValidationErrorStyle = iota
DataValidationErrorStyleStop
@@ -38,17 +40,17 @@ const (
DataValidationErrorStyleInformation
)
-// Data validation error styles
+// Data validation error styles.
const (
styleStop = "stop"
styleWarning = "warning"
styleInformation = "information"
)
-// DataValidationOperator operator enum
+// DataValidationOperator operator enum.
type DataValidationOperator int
-// Data validation operators
+// Data validation operators.
const (
_DataValidationOperator = iota
DataValidationOperatorBetween
@@ -61,16 +63,16 @@ const (
DataValidationOperatorNotEqual
)
-// NewDataValidation return data validation struct
+// NewDataValidation return data validation struct.
func NewDataValidation(allowBlank bool) *DataValidation {
return &DataValidation{
- AllowBlank: convBoolToStr(allowBlank),
- ShowErrorMessage: convBoolToStr(false),
- ShowInputMessage: convBoolToStr(false),
+ AllowBlank: allowBlank,
+ ShowErrorMessage: false,
+ ShowInputMessage: false,
}
}
-// SetError set error notice
+// SetError set error notice.
func (dd *DataValidation) SetError(style DataValidationErrorStyle, title, msg string) {
dd.Error = &msg
dd.ErrorTitle = &title
@@ -84,45 +86,31 @@ func (dd *DataValidation) SetError(style DataValidationErrorStyle, title, msg st
strStyle = styleInformation
}
- dd.ShowErrorMessage = convBoolToStr(true)
+ dd.ShowErrorMessage = true
dd.ErrorStyle = &strStyle
}
-// SetInput set prompt notice
+// SetInput set prompt notice.
func (dd *DataValidation) SetInput(title, msg string) {
- dd.ShowInputMessage = convBoolToStr(true)
+ dd.ShowInputMessage = true
dd.PromptTitle = &title
dd.Prompt = &msg
}
-// SetDropList data validation list
+// SetDropList data validation list.
func (dd *DataValidation) SetDropList(keys []string) error {
dd.Formula1 = "\"" + strings.Join(keys, ",") + "\""
dd.Type = convDataValidationType(typeList)
return nil
}
-// SetDropList data validation range
+// SetRange provides function to set data validation range in drop list.
func (dd *DataValidation) SetRange(f1, f2 int, t DataValidationType, o DataValidationOperator) error {
formula1 := fmt.Sprintf("%d", f1)
formula2 := fmt.Sprintf("%d", f2)
if dataValidationFormulaStrLen < len(dd.Formula1) || dataValidationFormulaStrLen < len(dd.Formula2) {
return fmt.Errorf(dataValidationFormulaStrLenErr)
}
- /*switch o {
- case DataValidationOperatorBetween:
- if f1 > f2 {
- tmp := formula1
- formula1 = formula2
- formula2 = tmp
- }
- case DataValidationOperatorNotBetween:
- if f1 > f2 {
- tmp := formula1
- formula1 = formula2
- formula2 = tmp
- }
- }*/
dd.Formula1 = formula1
dd.Formula2 = formula2
@@ -131,7 +119,7 @@ func (dd *DataValidation) SetRange(f1, f2 int, t DataValidationType, o DataValid
return nil
}
-// SetDropList data validation range
+// SetSqref provides function to set data validation range in drop list.
func (dd *DataValidation) SetSqref(sqref string) {
if dd.Sqref == "" {
dd.Sqref = sqref
@@ -140,15 +128,7 @@ func (dd *DataValidation) SetSqref(sqref string) {
}
}
-// convBoolToStr convert boolean to string , false to 0, true to 1
-func convBoolToStr(bl bool) string {
- if bl {
- return "1"
- }
- return "0"
-}
-
-// convDataValidationType get excel data validation type
+// convDataValidationType get excel data validation type.
func convDataValidationType(t DataValidationType) string {
typeMap := map[DataValidationType]string{
typeNone: "none",
@@ -165,7 +145,7 @@ func convDataValidationType(t DataValidationType) string {
}
-// convDataValidationOperatior get excel data validation operator
+// convDataValidationOperatior get excel data validation operator.
func convDataValidationOperatior(o DataValidationOperator) string {
typeMap := map[DataValidationOperator]string{
DataValidationOperatorBetween: "between",
@@ -182,6 +162,37 @@ func convDataValidationOperatior(o DataValidationOperator) string {
}
+// AddDataValidation provides set data validation on a range of the worksheet
+// by given data validation object and worksheet name. The data validation
+// object can be created by NewDataValidation function.
+//
+// Example 1, set data validation on Sheet1!A1:B2 with validation criteria
+// settings, show error alert after invalid data is entered whth "Stop" style
+// and custom title "error body":
+//
+// dvRange := excelize.NewDataValidation(true)
+// dvRange.Sqref = "A1:B2"
+// dvRange.SetRange(10, 20, excelize.DataValidationTypeWhole, excelize.DataValidationOperatorBetween)
+// dvRange.SetError(excelize.DataValidationErrorStyleStop, "error title", "error body")
+// xlsx.AddDataValidation("Sheet1", dvRange)
+//
+// Example 2, set data validation on Sheet1!A3:B4 with validation criteria
+// settings, and show input message when cell is selected:
+//
+// dvRange = excelize.NewDataValidation(true)
+// dvRange.Sqref = "A3:B4"
+// dvRange.SetRange(10, 20, excelize.DataValidationTypeWhole, excelize.DataValidationOperatorGreaterThan)
+// dvRange.SetInput("input title", "input body")
+// xlsx.AddDataValidation("Sheet1", dvRange)
+//
+// Example 4, set data validation on Sheet1!A5:B6 with validation criteria
+// settings, create in-cell dropdown by allow list source:
+//
+// dvRange = excelize.NewDataValidation(true)
+// dvRange.Sqref = "A5:B6"
+// dvRange.SetDropList([]string{"1", "2", "3"})
+// xlsx.AddDataValidation("Sheet1", dvRange)
+//
func (f *File) AddDataValidation(sheet string, dv *DataValidation) {
xlsx := f.workSheetReader(sheet)
if nil == xlsx.DataValidations {