summaryrefslogtreecommitdiff
path: root/datavalidation.go
diff options
context:
space:
mode:
Diffstat (limited to 'datavalidation.go')
-rw-r--r--datavalidation.go50
1 files changed, 37 insertions, 13 deletions
diff --git a/datavalidation.go b/datavalidation.go
index 8fb9623..1aeb1dc 100644
--- a/datavalidation.go
+++ b/datavalidation.go
@@ -1,11 +1,11 @@
-// Copyright 2016 - 2019 The excelize Authors. All rights reserved. Use of
+// Copyright 2016 - 2020 The excelize Authors. All rights reserved. Use of
// this source code is governed by a BSD-style license that can be found in
// the LICENSE file.
//
// Package excelize providing a set of functions that allow you to write to
// and read from XLSX files. Support reads and writes XLSX file generated by
// Microsoft Excelâ„¢ 2007 and later. Support save file without losing original
-// charts of XLSX. This library needs Go version 1.8 or later.
+// charts of XLSX. This library needs Go version 1.10 or later.
package excelize
@@ -112,7 +112,7 @@ func (dd *DataValidation) SetDropList(keys []string) error {
if dataValidationFormulaStrLen < len(formula) {
return fmt.Errorf(dataValidationFormulaStrLenErr)
}
- dd.Formula1 = formula
+ dd.Formula1 = fmt.Sprintf("<formula1>%s</formula1>", formula)
dd.Type = convDataValidationType(typeList)
return nil
}
@@ -121,12 +121,12 @@ func (dd *DataValidation) SetDropList(keys []string) error {
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) {
+ if dataValidationFormulaStrLen+21 < len(dd.Formula1) || dataValidationFormulaStrLen+21 < len(dd.Formula2) {
return fmt.Errorf(dataValidationFormulaStrLenErr)
}
- dd.Formula1 = formula1
- dd.Formula2 = formula2
+ dd.Formula1 = fmt.Sprintf("<formula1>%s</formula1>", formula1)
+ dd.Formula2 = fmt.Sprintf("<formula2>%s</formula2>", formula2)
dd.Type = convDataValidationType(t)
dd.Operator = convDataValidationOperatior(o)
return nil
@@ -141,12 +141,12 @@ func (dd *DataValidation) SetRange(f1, f2 int, t DataValidationType, o DataValid
//
// dvRange := excelize.NewDataValidation(true)
// dvRange.Sqref = "A7:B8"
-// dvRange.SetSqrefDropList("E1:E3", true)
+// dvRange.SetSqrefDropList("$E$1:$E$3", true)
// f.AddDataValidation("Sheet1", dvRange)
//
func (dd *DataValidation) SetSqrefDropList(sqref string, isCurrentSheet bool) error {
if isCurrentSheet {
- dd.Formula1 = sqref
+ dd.Formula1 = fmt.Sprintf("<formula1>%s</formula1>", sqref)
dd.Type = convDataValidationType(typeList)
return nil
}
@@ -228,14 +228,38 @@ func convDataValidationOperatior(o DataValidationOperator) string {
// err = f.AddDataValidation("Sheet1", dvRange)
//
func (f *File) AddDataValidation(sheet string, dv *DataValidation) error {
- xlsx, err := f.workSheetReader(sheet)
+ ws, err := f.workSheetReader(sheet)
if err != nil {
return err
}
- if nil == xlsx.DataValidations {
- xlsx.DataValidations = new(xlsxDataValidations)
+ if nil == ws.DataValidations {
+ ws.DataValidations = new(xlsxDataValidations)
}
- xlsx.DataValidations.DataValidation = append(xlsx.DataValidations.DataValidation, dv)
- xlsx.DataValidations.Count = len(xlsx.DataValidations.DataValidation)
+ ws.DataValidations.DataValidation = append(ws.DataValidations.DataValidation, dv)
+ ws.DataValidations.Count = len(ws.DataValidations.DataValidation)
return err
}
+
+// DeleteDataValidation delete data validation by given worksheet name and
+// reference sequence.
+func (f *File) DeleteDataValidation(sheet, sqref string) error {
+ ws, err := f.workSheetReader(sheet)
+ if err != nil {
+ return err
+ }
+ if ws.DataValidations == nil {
+ return nil
+ }
+ dv := ws.DataValidations
+ for i := 0; i < len(dv.DataValidation); i++ {
+ if dv.DataValidation[i].Sqref == sqref {
+ dv.DataValidation = append(dv.DataValidation[:i], dv.DataValidation[i+1:]...)
+ i--
+ }
+ }
+ dv.Count = len(dv.DataValidation)
+ if dv.Count == 0 {
+ ws.DataValidations = nil
+ }
+ return nil
+}