瀏覽代碼

fix: datavalidation list error, formula > 255 issue #339

rentiansheng 6 年之前
父節點
當前提交
daf32a37f9
共有 2 個文件被更改,包括 12 次插入4 次删除
  1. 5 1
      datavalidation.go
  2. 7 3
      datavalidation_test.go

+ 5 - 1
datavalidation.go

@@ -108,7 +108,11 @@ func (dd *DataValidation) SetInput(title, msg string) {
 
 // SetDropList data validation list.
 func (dd *DataValidation) SetDropList(keys []string) error {
-	dd.Formula1 = "\"" + strings.Join(keys, ",") + "\""
+	formula := "\"" + strings.Join(keys, ",") + "\""
+	if dataValidationFormulaStrLen < len(formula) {
+		return fmt.Errorf(dataValidationFormulaStrLenErr)
+	}
+	dd.Formula1 = formula
 	dd.Type = convDataValidationType(typeList)
 	return nil
 }

+ 7 - 3
datavalidation_test.go

@@ -72,10 +72,14 @@ func TestDataValidationError(t *testing.T) {
 	}
 
 	dvRange = NewDataValidation(true)
-	dvRange.SetDropList(make([]string, 258))
-
-	err = dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan)
+	err = dvRange.SetDropList(make([]string, 258))
+	if dvRange.Formula1 != "" {
+		t.Errorf("data validation error. Formula1 must be empty!")
+		return
+	}
 	assert.EqualError(t, err, "data validation must be 0-255 characters")
+	dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorGreaterThan)
+	dvRange.SetSqref("A9:B10")
 
 	xlsx.AddDataValidation("Sheet1", dvRange)
 	if !assert.NoError(t, xlsx.SaveAs(resultFile)) {