summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2020-05-15 14:17:50 +0800
committerGitHub <noreply@github.com>2020-05-15 14:17:50 +0800
commit9b7d8463d39ad5fcaae24e5a3b7da296c5e29d17 (patch)
tree81e078c97f3a9facea128a9698b0b70f25484b5b
parent9baa1bbc9865bee1b3c8981ab98eb8c9049c40e4 (diff)
parentc815e4b84b9b777c30d127f384b38105afa2640d (diff)
Merge pull request #638 from yuemanxilou/master
avoid duplicate filter database in workbook defined name
-rw-r--r--table.go32
1 files changed, 21 insertions, 11 deletions
diff --git a/table.go b/table.go
index ae47471..5a0e46f 100644
--- a/table.go
+++ b/table.go
@@ -281,28 +281,38 @@ func (f *File) AutoFilter(sheet, hcell, vcell, format string) error {
formatSet, _ := parseAutoFilterSet(format)
var cellStart, cellEnd string
- cellStart, err = CoordinatesToCellName(hcol, hrow)
- if err != nil {
+ if cellStart, err = CoordinatesToCellName(hcol, hrow); err != nil {
return err
}
- cellEnd, err = CoordinatesToCellName(vcol, vrow)
- if err != nil {
+ if cellEnd, err = CoordinatesToCellName(vcol, vrow); err != nil {
return err
}
- ref := cellStart + ":" + cellEnd
+ ref, filterDB := cellStart+":"+cellEnd, "_xlnm._FilterDatabase"
wb := f.workbookReader()
+ sheetID := f.GetSheetIndex(sheet)
+ filterRange := fmt.Sprintf("%s!%s", sheet, ref)
d := xlsxDefinedName{
- Name: "_xlnm._FilterDatabase",
+ Name: filterDB,
Hidden: true,
- LocalSheetID: intPtr(f.GetSheetIndex(sheet)),
- Data: fmt.Sprintf("%s!%s", sheet, ref),
+ LocalSheetID: intPtr(sheetID),
+ Data: filterRange,
}
- if wb.DefinedNames != nil {
- wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName, d)
- } else {
+ if wb.DefinedNames == nil {
wb.DefinedNames = &xlsxDefinedNames{
DefinedName: []xlsxDefinedName{d},
}
+ } else {
+ var definedNameExists bool
+ for idx := range wb.DefinedNames.DefinedName {
+ definedName := wb.DefinedNames.DefinedName[idx]
+ if definedName.Name == filterDB && *definedName.LocalSheetID == sheetID && definedName.Hidden {
+ wb.DefinedNames.DefinedName[idx].Data = filterRange
+ definedNameExists = true
+ }
+ }
+ if !definedNameExists {
+ wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName, d)
+ }
}
refRange := vcol - hcol
return f.autoFilter(sheet, ref, refRange, hcol, formatSet)