From 7d9b9275bd14556bfcaab7f1d3690b1e54ab75e8 Mon Sep 17 00:00:00 2001 From: xuri Date: Thu, 26 Aug 2021 00:48:18 +0800 Subject: This closes #1012, support specify the formula in the data validation range, and update the documentation for the `AddPicture` --- datavalidation.go | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'datavalidation.go') diff --git a/datavalidation.go b/datavalidation.go index e182ebe..047a53c 100644 --- a/datavalidation.go +++ b/datavalidation.go @@ -128,13 +128,37 @@ func (dd *DataValidation) SetDropList(keys []string) error { return nil } -// SetRange provides function to set data validation range in drop list. -func (dd *DataValidation) SetRange(f1, f2 float64, t DataValidationType, o DataValidationOperator) error { - if math.Abs(f1) > math.MaxFloat32 || math.Abs(f2) > math.MaxFloat32 { - return ErrDataValidationRange +// SetRange provides function to set data validation range in drop list, only +// accepts int, float64, or string data type formula argument. +func (dd *DataValidation) SetRange(f1, f2 interface{}, t DataValidationType, o DataValidationOperator) error { + var formula1, formula2 string + switch v := f1.(type) { + case int: + formula1 = fmt.Sprintf("%d", int(v)) + case float64: + if math.Abs(float64(v)) > math.MaxFloat32 { + return ErrDataValidationRange + } + formula1 = fmt.Sprintf("%.17g", float64(v)) + case string: + formula1 = fmt.Sprintf("%s", string(v)) + default: + return ErrParameterInvalid + } + switch v := f2.(type) { + case int: + formula2 = fmt.Sprintf("%d", int(v)) + case float64: + if math.Abs(float64(v)) > math.MaxFloat32 { + return ErrDataValidationRange + } + formula2 = fmt.Sprintf("%.17g", float64(v)) + case string: + formula2 = fmt.Sprintf("%s", string(v)) + default: + return ErrParameterInvalid } - dd.Formula1 = fmt.Sprintf("%.17g", f1) - dd.Formula2 = fmt.Sprintf("%.17g", f2) + dd.Formula1, dd.Formula2 = formula1, formula2 dd.Type = convDataValidationType(t) dd.Operator = convDataValidationOperatior(o) return nil -- cgit v1.2.1