fix: LocalSheetID in DefinedName should be equal to SheetIndex instead of SheetID (#868)

v2
vettich 4 years ago committed by GitHub
parent f27624acdd
commit 5ec61310dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -507,17 +507,17 @@ func (f *File) DeleteSheet(name string) {
wb := f.workbookReader() wb := f.workbookReader()
wbRels := f.relsReader(f.getWorkbookRelsPath()) wbRels := f.relsReader(f.getWorkbookRelsPath())
activeSheetName := f.GetSheetName(f.GetActiveSheetIndex()) activeSheetName := f.GetSheetName(f.GetActiveSheetIndex())
deleteSheetID := f.getSheetID(name) deleteLocalSheetID := f.GetSheetIndex(name)
// Delete and adjust defined names // Delete and adjust defined names
if wb.DefinedNames != nil { if wb.DefinedNames != nil {
for idx := 0; idx < len(wb.DefinedNames.DefinedName); idx++ { for idx := 0; idx < len(wb.DefinedNames.DefinedName); idx++ {
dn := wb.DefinedNames.DefinedName[idx] dn := wb.DefinedNames.DefinedName[idx]
if dn.LocalSheetID != nil { if dn.LocalSheetID != nil {
sheetID := *dn.LocalSheetID + 1 localSheetID := *dn.LocalSheetID
if sheetID == deleteSheetID { if localSheetID == deleteLocalSheetID {
wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName[:idx], wb.DefinedNames.DefinedName[idx+1:]...) wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName[:idx], wb.DefinedNames.DefinedName[idx+1:]...)
idx-- idx--
} else if sheetID > deleteSheetID { } else if localSheetID > deleteLocalSheetID {
wb.DefinedNames.DefinedName[idx].LocalSheetID = intPtr(*dn.LocalSheetID - 1) wb.DefinedNames.DefinedName[idx].LocalSheetID = intPtr(*dn.LocalSheetID - 1)
} }
} }
@ -1495,7 +1495,7 @@ func (f *File) SetDefinedName(definedName *DefinedName) error {
for _, dn := range wb.DefinedNames.DefinedName { for _, dn := range wb.DefinedNames.DefinedName {
var scope string var scope string
if dn.LocalSheetID != nil { if dn.LocalSheetID != nil {
scope = f.getSheetNameByID(*dn.LocalSheetID + 1) scope = f.GetSheetName(*dn.LocalSheetID)
} }
if scope == definedName.Scope && dn.Name == definedName.Name { if scope == definedName.Scope && dn.Name == definedName.Name {
return errors.New("the same name already exists on the scope") return errors.New("the same name already exists on the scope")
@ -1525,7 +1525,7 @@ func (f *File) DeleteDefinedName(definedName *DefinedName) error {
for idx, dn := range wb.DefinedNames.DefinedName { for idx, dn := range wb.DefinedNames.DefinedName {
var scope string var scope string
if dn.LocalSheetID != nil { if dn.LocalSheetID != nil {
scope = f.getSheetNameByID(*dn.LocalSheetID + 1) scope = f.GetSheetName(*dn.LocalSheetID)
} }
if scope == definedName.Scope && dn.Name == definedName.Name { if scope == definedName.Scope && dn.Name == definedName.Name {
wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName[:idx], wb.DefinedNames.DefinedName[idx+1:]...) wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName[:idx], wb.DefinedNames.DefinedName[idx+1:]...)
@ -1550,7 +1550,7 @@ func (f *File) GetDefinedName() []DefinedName {
Scope: "Workbook", Scope: "Workbook",
} }
if dn.LocalSheetID != nil && *dn.LocalSheetID >= 0 { if dn.LocalSheetID != nil && *dn.LocalSheetID >= 0 {
definedName.Scope = f.getSheetNameByID(*dn.LocalSheetID + 1) definedName.Scope = f.GetSheetName(*dn.LocalSheetID)
} }
definedNames = append(definedNames, definedName) definedNames = append(definedNames, definedName)
} }

Loading…
Cancel
Save