From 13e0ed2a69af0ff0ba20e50fb23dd4909a39b69d Mon Sep 17 00:00:00 2001 From: xuri Date: Mon, 23 Nov 2020 00:01:06 +0800 Subject: [PATCH] Fixed #735, refresh active tab after delete sheet --- cell.go | 9 ++++----- sheet.go | 12 +++--------- sheet_test.go | 11 ++++++++++- 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") -- GitLab