summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2020-11-23 00:01:06 +0800
committerxuri <xuri.me@gmail.com>2020-11-23 00:01:06 +0800
commit13e0ed2a69af0ff0ba20e50fb23dd4909a39b69d (patch)
tree9401dc111df1d36ae924fd82ecb35e442ca7b5e7
parent599a8cb0bceb6cb14d3018360bb4c5140753c2b3 (diff)
Fixed #735, refresh active tab after delete sheet
-rw-r--r--cell.go9
-rw-r--r--sheet.go12
-rw-r--r--sheet_test.go11
3 files changed, 17 insertions, 15 deletions
diff --git a/cell.go b/cell.go
index 019f300..1edfd24 100644
--- a/cell.go
+++ b/cell.go
@@ -765,21 +765,20 @@ func (f *File) formattedValue(s int, v string) string {
if s >= len(styleSheet.CellXfs.Xf) {
return v
}
- numFmtId := *styleSheet.CellXfs.Xf[s].NumFmtID
- ok := builtInNumFmtFunc[numFmtId]
+ numFmtID := *styleSheet.CellXfs.Xf[s].NumFmtID
+ ok := builtInNumFmtFunc[numFmtID]
if ok != nil {
- return ok(v, builtInNumFmt[numFmtId])
+ return ok(v, builtInNumFmt[numFmtID])
}
if styleSheet == nil || styleSheet.NumFmts == nil {
return v
}
for _, xlsxFmt := range styleSheet.NumFmts.NumFmt {
- if xlsxFmt.NumFmtID == numFmtId {
+ if xlsxFmt.NumFmtID == numFmtID {
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") {
return parseTime(v, format)
}
-
return v
}
}
diff --git a/sheet.go b/sheet.go
index 82eaae9..82c6a69 100644
--- a/sheet.go
+++ b/sheet.go
@@ -317,7 +317,7 @@ func (f *File) GetActiveSheetIndex() (index int) {
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.
func (f *File) getActiveSheetID() int {
wb := f.workbookReader()
@@ -499,6 +499,7 @@ func (f *File) DeleteSheet(name string) {
sheetName := trimSheetName(name)
wb := f.workbookReader()
wbRels := f.relsReader(f.getWorkbookRelsPath())
+ activeSheetName := f.GetSheetName(f.GetActiveSheetIndex())
for idx, sheet := range wb.Sheets.Sheet {
if sheet.Name == sheetName {
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--
}
}
- 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
diff --git a/sheet_test.go b/sheet_test.go
index bfe0ce3..d1c8f64 100644
--- a/sheet_test.go
+++ b/sheet_test.go
@@ -359,6 +359,15 @@ func TestGetWorkbookRelsPath(t *testing.T) {
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) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -380,9 +389,9 @@ func BenchmarkFile_SaveAs(b *testing.B) {
for pb.Next() {
newSheetWithSave()
}
-
})
}
+
func newSheetWithSave() {
file := NewFile()
file.NewSheet("sheet1")