From 4834a058aa3f953a7010704f2358633ae6e1d492 Mon Sep 17 00:00:00 2001 From: xuri Date: Mon, 19 Oct 2020 23:55:54 +0800 Subject: [PATCH] This closes #714 and closes #715, fix wrong worksheet index returned by NewSheet in some case, fix panic on formatted value with no built-in number format ID --- cell.go | 3 +++ cell_test.go | 10 ++++++++++ sheet.go | 5 +++-- sheet_test.go | 2 ++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/cell.go b/cell.go index 11c6836..bdda48c 100644 --- a/cell.go +++ b/cell.go @@ -770,6 +770,9 @@ func (f *File) formattedValue(s int, v string) string { if ok != nil { return ok(v, builtInNumFmt[numFmtId]) } + if styleSheet == nil || styleSheet.NumFmts == nil { + return v + } for _, xlsxFmt := range styleSheet.NumFmts.NumFmt { if xlsxFmt.NumFmtID == numFmtId { format := strings.ToLower(xlsxFmt.FormatCode) diff --git a/cell_test.go b/cell_test.go index a855344..f707256 100644 --- a/cell_test.go +++ b/cell_test.go @@ -299,4 +299,14 @@ func TestFormattedValue(t *testing.T) { assert.NoError(t, err) v = f.formattedValue(1, "43528") assert.Equal(t, "03/04/2019", v) + + // formatted value with no built-in number format ID + assert.NoError(t, err) + f.Styles.NumFmts = nil + numFmtID := 5 + f.Styles.CellXfs.Xf = append(f.Styles.CellXfs.Xf, xlsxXf{ + NumFmtID: &numFmtID, + }) + v = f.formattedValue(1, "43528") + assert.Equal(t, "43528", v) } diff --git a/sheet.go b/sheet.go index aaa72cc..44067fe 100644 --- a/sheet.go +++ b/sheet.go @@ -37,8 +37,9 @@ import ( // appending the new sheet. func (f *File) NewSheet(name string) int { // Check if the worksheet already exists - if f.GetSheetIndex(name) != -1 { - return f.SheetCount + index := f.GetSheetIndex(name) + if index != -1 { + return index } f.DeleteSheet(name) f.SheetCount++ diff --git a/sheet_test.go b/sheet_test.go index 56f5f46..1a59b65 100644 --- a/sheet_test.go +++ b/sheet_test.go @@ -71,6 +71,8 @@ func TestNewSheet(t *testing.T) { // delete original sheet f.DeleteSheet(f.GetSheetName(f.GetSheetIndex("Sheet1"))) assert.NoError(t, f.SaveAs(filepath.Join("test", "TestNewSheet.xlsx"))) + // create new worksheet with already exists name + assert.Equal(t, f.GetSheetIndex("Sheet2"), f.NewSheet("Sheet2")) } func TestSetPane(t *testing.T) { -- GitLab