Skip to content

Commit 6ab5b99

Browse files
committed
Resolve qax-os#348, support delete Data Validation
1 parent 9e2318c commit 6ab5b99

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

datavalidation.go

+29-5
Original file line numberDiff line numberDiff line change
@@ -228,14 +228,38 @@ func convDataValidationOperatior(o DataValidationOperator) string {
228228
// err = f.AddDataValidation("Sheet1", dvRange)
229229
//
230230
func (f *File) AddDataValidation(sheet string, dv *DataValidation) error {
231-
xlsx, err := f.workSheetReader(sheet)
231+
ws, err := f.workSheetReader(sheet)
232232
if err != nil {
233233
return err
234234
}
235-
if nil == xlsx.DataValidations {
236-
xlsx.DataValidations = new(xlsxDataValidations)
235+
if nil == ws.DataValidations {
236+
ws.DataValidations = new(xlsxDataValidations)
237237
}
238-
xlsx.DataValidations.DataValidation = append(xlsx.DataValidations.DataValidation, dv)
239-
xlsx.DataValidations.Count = len(xlsx.DataValidations.DataValidation)
238+
ws.DataValidations.DataValidation = append(ws.DataValidations.DataValidation, dv)
239+
ws.DataValidations.Count = len(ws.DataValidations.DataValidation)
240240
return err
241241
}
242+
243+
// DeleteDataValidation delete data validation by given worksheet name and
244+
// reference sequence.
245+
func (f *File) DeleteDataValidation(sheet, sqref string) error {
246+
ws, err := f.workSheetReader(sheet)
247+
if err != nil {
248+
return err
249+
}
250+
if ws.DataValidations == nil {
251+
return nil
252+
}
253+
dv := ws.DataValidations
254+
for i := 0; i < len(dv.DataValidation); i++ {
255+
if dv.DataValidation[i].Sqref == sqref {
256+
dv.DataValidation = append(dv.DataValidation[:i], dv.DataValidation[i+1:]...)
257+
i--
258+
}
259+
}
260+
dv.Count = len(dv.DataValidation)
261+
if dv.Count == 0 {
262+
ws.DataValidations = nil
263+
}
264+
return nil
265+
}

datavalidation_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,20 @@ func TestDataValidationError(t *testing.T) {
8585
f = NewFile()
8686
assert.EqualError(t, f.AddDataValidation("SheetN", nil), "sheet SheetN is not exist")
8787
}
88+
89+
func TestDeleteDataValidation(t *testing.T) {
90+
f := NewFile()
91+
assert.NoError(t, f.DeleteDataValidation("Sheet1", "A1:B2"))
92+
93+
dvRange := NewDataValidation(true)
94+
dvRange.Sqref = "A1:B2"
95+
assert.NoError(t, dvRange.SetRange(10, 20, DataValidationTypeWhole, DataValidationOperatorBetween))
96+
dvRange.SetInput("input title", "input body")
97+
assert.NoError(t, f.AddDataValidation("Sheet1", dvRange))
98+
99+
assert.NoError(t, f.DeleteDataValidation("Sheet1", "A1:B2"))
100+
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestDeleteDataValidation.xlsx")))
101+
102+
// Test delete data validation on no exists worksheet.
103+
assert.EqualError(t, f.DeleteDataValidation("SheetN", "A1:B2"), "sheet SheetN is not exist")
104+
}

test/images/chart.png

-51.7 KB
Loading

0 commit comments

Comments
 (0)