Browse Source

Fixed #735, refresh active tab after delete sheet

xuri 5 years ago
parent
commit
13e0ed2a69
3 changed files with 17 additions and 15 deletions
  1. 4 5
      cell.go
  2. 3 9
      sheet.go
  3. 10 1
      sheet_test.go

+ 4 - 5
cell.go

@@ -765,21 +765,20 @@ func (f *File) formattedValue(s int, v string) string {
 	if s >= len(styleSheet.CellXfs.Xf) {
 	if s >= len(styleSheet.CellXfs.Xf) {
 		return v
 		return v
 	}
 	}
-	numFmtId := *styleSheet.CellXfs.Xf[s].NumFmtID
-	ok := builtInNumFmtFunc[numFmtId]
+	numFmtID := *styleSheet.CellXfs.Xf[s].NumFmtID
+	ok := builtInNumFmtFunc[numFmtID]
 	if ok != nil {
 	if ok != nil {
-		return ok(v, builtInNumFmt[numFmtId])
+		return ok(v, builtInNumFmt[numFmtID])
 	}
 	}
 	if styleSheet == nil || styleSheet.NumFmts == nil {
 	if styleSheet == nil || styleSheet.NumFmts == nil {
 		return v
 		return v
 	}
 	}
 	for _, xlsxFmt := range styleSheet.NumFmts.NumFmt {
 	for _, xlsxFmt := range styleSheet.NumFmts.NumFmt {
-		if xlsxFmt.NumFmtID == numFmtId {
+		if xlsxFmt.NumFmtID == numFmtID {
 			format := strings.ToLower(xlsxFmt.FormatCode)
 			format := strings.ToLower(xlsxFmt.FormatCode)
 			if strings.Contains(format, "y") || strings.Contains(format, "m") || strings.Contains(strings.Replace(format, "red", "", -1), "d") || strings.Contains(format, "h") {
 			if strings.Contains(format, "y") || strings.Contains(format, "m") || strings.Contains(strings.Replace(format, "red", "", -1), "d") || strings.Contains(format, "h") {
 				return parseTime(v, format)
 				return parseTime(v, format)
 			}
 			}
-
 			return v
 			return v
 		}
 		}
 	}
 	}

+ 3 - 9
sheet.go

@@ -317,7 +317,7 @@ func (f *File) GetActiveSheetIndex() (index int) {
 	return
 	return
 }
 }
 
 
-// getActiveSheetID provides a function to get active sheet index of the
+// getActiveSheetID provides a function to get active sheet ID of the
 // spreadsheet. If not found the active sheet will be return integer 0.
 // spreadsheet. If not found the active sheet will be return integer 0.
 func (f *File) getActiveSheetID() int {
 func (f *File) getActiveSheetID() int {
 	wb := f.workbookReader()
 	wb := f.workbookReader()
@@ -499,6 +499,7 @@ func (f *File) DeleteSheet(name string) {
 	sheetName := trimSheetName(name)
 	sheetName := trimSheetName(name)
 	wb := f.workbookReader()
 	wb := f.workbookReader()
 	wbRels := f.relsReader(f.getWorkbookRelsPath())
 	wbRels := f.relsReader(f.getWorkbookRelsPath())
+	activeSheetName := f.GetSheetName(f.GetActiveSheetIndex())
 	for idx, sheet := range wb.Sheets.Sheet {
 	for idx, sheet := range wb.Sheets.Sheet {
 		if sheet.Name == sheetName {
 		if sheet.Name == sheetName {
 			wb.Sheets.Sheet = append(wb.Sheets.Sheet[:idx], wb.Sheets.Sheet[idx+1:]...)
 			wb.Sheets.Sheet = append(wb.Sheets.Sheet[:idx], wb.Sheets.Sheet[idx+1:]...)
@@ -526,14 +527,7 @@ func (f *File) DeleteSheet(name string) {
 			f.SheetCount--
 			f.SheetCount--
 		}
 		}
 	}
 	}
-	if wb.BookViews != nil {
-		for idx, bookView := range wb.BookViews.WorkBookView {
-			if bookView.ActiveTab >= f.SheetCount {
-				wb.BookViews.WorkBookView[idx].ActiveTab--
-			}
-		}
-	}
-	f.SetActiveSheet(len(f.GetSheetMap()))
+	f.SetActiveSheet(f.GetSheetIndex(activeSheetName))
 }
 }
 
 
 // deleteSheetFromWorkbookRels provides a function to remove worksheet
 // deleteSheetFromWorkbookRels provides a function to remove worksheet

+ 10 - 1
sheet_test.go

@@ -359,6 +359,15 @@ func TestGetWorkbookRelsPath(t *testing.T) {
 	assert.Equal(t, "_rels/workbook.xml.rels", f.getWorkbookRelsPath())
 	assert.Equal(t, "_rels/workbook.xml.rels", f.getWorkbookRelsPath())
 }
 }
 
 
+func TestDeleteSheet(t *testing.T) {
+	f := NewFile()
+	f.SetActiveSheet(f.NewSheet("Sheet2"))
+	f.NewSheet("Sheet3")
+	f.DeleteSheet("Sheet1")
+	assert.Equal(t, "Sheet2", f.GetSheetName(f.GetActiveSheetIndex()))
+	assert.NoError(t, f.SaveAs(filepath.Join("test", "TestDeleteSheet.xlsx")))
+}
+
 func BenchmarkNewSheet(b *testing.B) {
 func BenchmarkNewSheet(b *testing.B) {
 	b.RunParallel(func(pb *testing.PB) {
 	b.RunParallel(func(pb *testing.PB) {
 		for pb.Next() {
 		for pb.Next() {
@@ -380,9 +389,9 @@ func BenchmarkFile_SaveAs(b *testing.B) {
 		for pb.Next() {
 		for pb.Next() {
 			newSheetWithSave()
 			newSheetWithSave()
 		}
 		}
-
 	})
 	})
 }
 }
+
 func newSheetWithSave() {
 func newSheetWithSave() {
 	file := NewFile()
 	file := NewFile()
 	file.NewSheet("sheet1")
 	file.NewSheet("sheet1")