summaryrefslogtreecommitdiff
path: root/sheet.go
diff options
context:
space:
mode:
Diffstat (limited to 'sheet.go')
-rw-r--r--sheet.go78
1 files changed, 45 insertions, 33 deletions
diff --git a/sheet.go b/sheet.go
index b9a0766..6244e02 100644
--- a/sheet.go
+++ b/sheet.go
@@ -555,46 +555,58 @@ func (f *File) DeleteSheet(name string) {
wbRels := f.relsReader(f.getWorkbookRelsPath())
activeSheetName := f.GetSheetName(f.GetActiveSheetIndex())
deleteLocalSheetID := f.GetSheetIndex(name)
- // Delete and adjust defined names
- if wb.DefinedNames != nil {
- for idx := 0; idx < len(wb.DefinedNames.DefinedName); idx++ {
- dn := wb.DefinedNames.DefinedName[idx]
- if dn.LocalSheetID != nil {
- localSheetID := *dn.LocalSheetID
- if localSheetID == deleteLocalSheetID {
- wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName[:idx], wb.DefinedNames.DefinedName[idx+1:]...)
- idx--
- } else if localSheetID > deleteLocalSheetID {
- wb.DefinedNames.DefinedName[idx].LocalSheetID = intPtr(*dn.LocalSheetID - 1)
+ deleteAndAdjustDefinedNames(wb, deleteLocalSheetID)
+
+ for idx, sheet := range wb.Sheets.Sheet {
+ if !strings.EqualFold(sheet.Name, sheetName) {
+ continue
+ }
+
+ wb.Sheets.Sheet = append(wb.Sheets.Sheet[:idx], wb.Sheets.Sheet[idx+1:]...)
+ var sheetXML, rels string
+ if wbRels != nil {
+ for _, rel := range wbRels.Relationships {
+ if rel.ID == sheet.ID {
+ sheetXML = f.getWorksheetPath(rel.Target)
+ rels = "xl/worksheets/_rels/" + strings.TrimPrefix(f.sheetMap[sheetName], "xl/worksheets/") + ".rels"
}
}
}
+ target := f.deleteSheetFromWorkbookRels(sheet.ID)
+ f.deleteSheetFromContentTypes(target)
+ f.deleteCalcChain(sheet.SheetID, "")
+ delete(f.sheetMap, sheet.Name)
+ f.Pkg.Delete(sheetXML)
+ f.Pkg.Delete(rels)
+ f.Relationships.Delete(rels)
+ f.Sheet.Delete(sheetXML)
+ delete(f.xmlAttr, sheetXML)
+ f.SheetCount--
}
- for idx, sheet := range wb.Sheets.Sheet {
- if strings.EqualFold(sheet.Name, sheetName) {
- wb.Sheets.Sheet = append(wb.Sheets.Sheet[:idx], wb.Sheets.Sheet[idx+1:]...)
- var sheetXML, rels string
- if wbRels != nil {
- for _, rel := range wbRels.Relationships {
- if rel.ID == sheet.ID {
- sheetXML = f.getWorksheetPath(rel.Target)
- rels = "xl/worksheets/_rels/" + strings.TrimPrefix(f.sheetMap[sheetName], "xl/worksheets/") + ".rels"
- }
- }
+ f.SetActiveSheet(f.GetSheetIndex(activeSheetName))
+}
+
+func deleteAndAdjustDefinedNames(wb *xlsxWorkbook, deleteLocalSheetID int) {
+ if wb == nil {
+ return
+ }
+
+ if wb.DefinedNames == nil {
+ return
+ }
+
+ for idx := 0; idx < len(wb.DefinedNames.DefinedName); idx++ {
+ dn := wb.DefinedNames.DefinedName[idx]
+ if dn.LocalSheetID != nil {
+ localSheetID := *dn.LocalSheetID
+ if localSheetID == deleteLocalSheetID {
+ wb.DefinedNames.DefinedName = append(wb.DefinedNames.DefinedName[:idx], wb.DefinedNames.DefinedName[idx+1:]...)
+ idx--
+ } else if localSheetID > deleteLocalSheetID {
+ wb.DefinedNames.DefinedName[idx].LocalSheetID = intPtr(*dn.LocalSheetID - 1)
}
- target := f.deleteSheetFromWorkbookRels(sheet.ID)
- f.deleteSheetFromContentTypes(target)
- f.deleteCalcChain(sheet.SheetID, "")
- delete(f.sheetMap, sheet.Name)
- f.Pkg.Delete(sheetXML)
- f.Pkg.Delete(rels)
- f.Relationships.Delete(rels)
- f.Sheet.Delete(sheetXML)
- delete(f.xmlAttr, sheetXML)
- f.SheetCount--
}
}
- f.SetActiveSheet(f.GetSheetIndex(activeSheetName))
}
// deleteSheetFromWorkbookRels provides a function to remove worksheet