Browse Source

data validation must be 0-255 characters issue #380

rentiansheng 7 years ago
parent
commit
d9de3d4b17
2 changed files with 25 additions and 10 deletions
  1. 17 2
      datavalidation.go
  2. 8 8
      datavalidation_test.go

+ 17 - 2
datavalidation.go

@@ -21,6 +21,13 @@ const (
 	DataValidationTypeWhole
 )
 
+const (
+	// dataValidationFormulaStrLen 255 characters+ 2 quotes
+	dataValidationFormulaStrLen = 257
+	// dataValidationFormulaStrLenErr
+	dataValidationFormulaStrLenErr = "data validation must be 0-255 characters"
+)
+
 type DataValidationErrorStyle int
 
 // Data validation error styles
@@ -87,15 +94,22 @@ func (dd *xlsxCellDataValidation) SetInput(title, msg *string) {
 }
 
 // SetDropList data validation list
-func (dd *xlsxCellDataValidation) SetDropList(keys []string) {
+func (dd *xlsxCellDataValidation) SetDropList(keys []string) error {
 	dd.Formula1 = "\"" + strings.Join(keys, ",") + "\""
+	/*if dataValidationFormulaStrLen < len(dd.Formula1) {
+		return fmt.Errorf(dataValidationFormulaStrLenErr)
+	}*/
 	dd.Type = convDataValidationType(typeList)
+	return nil
 }
 
 // SetDropList data validation range
-func (dd *xlsxCellDataValidation) SetRange(f1, f2 int, t DataValidationType, o DataValidationOperator) {
+func (dd *xlsxCellDataValidation) 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 {
@@ -115,6 +129,7 @@ func (dd *xlsxCellDataValidation) SetRange(f1, f2 int, t DataValidationType, o D
 	dd.Formula2 = formula2
 	dd.Type = convDataValidationType(t)
 	dd.Operator = convDataValidationOperatior(o)
+	return nil
 }
 
 // convBoolToStr  convert boolean to string , false to 0, true to 1

+ 8 - 8
datavalidation_test.go

@@ -21,29 +21,29 @@ func TestDataValidation(t *testing.T) {
 	}
 	row = sheet.AddRow()
 	cell = row.AddCell()
-	cell.Value = "b"
+	cell.Value = "a1"
 
 	dd := NewXlsxCellDataValidation(true, true, true)
-	dd.SetDropList([]string{"a", "b", "b"})
+	dd.SetDropList([]string{"a1", "a2", "a3"})
 
 	dd.SetInput(&title, &msg)
 	cell.SetDataValidation(dd)
 
 	dd = NewXlsxCellDataValidation(true, true, true)
-	dd.SetDropList([]string{"a", "b", "b"})
-	title = "col b"
+	dd.SetDropList([]string{"c1", "c2", "c3"})
+	title = "col c"
 	dd.SetInput(&title, &msg)
 	sheet.Col(2).SetDataValidation(dd, 0, 0)
 
 	dd = NewXlsxCellDataValidation(true, true, true)
-	dd.SetDropList([]string{"a", "b", "b"})
-	title = "col c range"
+	dd.SetDropList([]string{"d", "d1", "d2"})
+	title = "col d range"
 	dd.SetInput(&title, &msg)
 	sheet.Col(3).SetDataValidation(dd, 3, 7)
 
 	dd = NewXlsxCellDataValidation(true, true, true)
-	dd.SetDropList([]string{"a", "b", "b"})
-	title = "col d start 3"
+	dd.SetDropList([]string{"e1", "e2", "e3"})
+	title = "col e start 3"
 	dd.SetInput(&title, &msg)
 	sheet.Col(4).SetDataValidationWithStart(dd, 1)