已验证 提交 13e0ed2a 编写于 作者: xurime's avatar xurime

Fixed #735, refresh active tab after delete sheet

上级 599a8cb0
...@@ -765,21 +765,20 @@ func (f *File) formattedValue(s int, v string) string { ...@@ -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 numFmtID := *styleSheet.CellXfs.Xf[s].NumFmtID
ok := builtInNumFmtFunc[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
} }
} }
......
...@@ -317,7 +317,7 @@ func (f *File) GetActiveSheetIndex() (index int) { ...@@ -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) { ...@@ -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) { ...@@ -526,14 +527,7 @@ func (f *File) DeleteSheet(name string) {
f.SheetCount-- f.SheetCount--
} }
} }
if wb.BookViews != nil { f.SetActiveSheet(f.GetSheetIndex(activeSheetName))
for idx, bookView := range wb.BookViews.WorkBookView {
if bookView.ActiveTab >= f.SheetCount {
wb.BookViews.WorkBookView[idx].ActiveTab--
}
}
}
f.SetActiveSheet(len(f.GetSheetMap()))
} }
// deleteSheetFromWorkbookRels provides a function to remove worksheet // deleteSheetFromWorkbookRels provides a function to remove worksheet
......
...@@ -359,6 +359,15 @@ func TestGetWorkbookRelsPath(t *testing.T) { ...@@ -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) { ...@@ -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")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册