summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2021-09-28 22:02:31 +0800
committerxuri <xuri.me@gmail.com>2021-09-28 22:02:31 +0800
commit2d8b5b1885b3d5cd14c974df61a3d0d757efd7bd (patch)
tree855a0c980145b9fbae26a55fe07676b765e1d518
parent490f3063c2cb35a94d64f6a6859cce7b9dee276d (diff)
This closes #1027 and closes #1028
* Fix build-in scientific number format failed * An error will be returned if given an invalid custom number format when creating a new style
-rw-r--r--errors.go2
-rw-r--r--styles.go5
-rw-r--r--styles_test.go16
3 files changed, 20 insertions, 3 deletions
diff --git a/errors.go b/errors.go
index 9fc0957..e89fea1 100644
--- a/errors.go
+++ b/errors.go
@@ -112,6 +112,8 @@ var (
// ErrDefinedNameduplicate defined the error message on the same name
// already exists on the scope.
ErrDefinedNameduplicate = errors.New("the same name already exists on the scope")
+ // ErrCustomNumFmt defined the error message on receive the empty parameter.
+ ErrCustomNumFmt = errors.New("custom number format can not be empty")
// ErrFontLength defined the error message on the length of the font
// family name overflow.
ErrFontLength = errors.New("the length of the font family name must be smaller than or equal to 31")
diff --git a/styles.go b/styles.go
index e4f3a27..0ae9e51 100644
--- a/styles.go
+++ b/styles.go
@@ -930,7 +930,7 @@ func formatToE(v string, format string) string {
if err != nil {
return v
}
- return fmt.Sprintf("%.e", f)
+ return fmt.Sprintf("%.2E", f)
}
// parseTime provides a function to returns a string parsed using time.Time.
@@ -1115,6 +1115,9 @@ func parseFormatStyleSet(style interface{}) (*Style, error) {
return &fs, ErrFontSize
}
}
+ if fs.CustomNumFmt != nil && len(*fs.CustomNumFmt) == 0 {
+ err = ErrCustomNumFmt
+ }
return &fs, err
}
diff --git a/styles_test.go b/styles_test.go
index 5d452f6..a214aaa 100644
--- a/styles_test.go
+++ b/styles_test.go
@@ -203,10 +203,13 @@ func TestNewStyle(t *testing.T) {
_, err = f.NewStyle(Style{})
assert.EqualError(t, err, ErrParameterInvalid.Error())
+ var exp string
+ _, err = f.NewStyle(&Style{CustomNumFmt: &exp})
+ assert.EqualError(t, err, ErrCustomNumFmt.Error())
_, err = f.NewStyle(&Style{Font: &Font{Family: strings.Repeat("s", MaxFontFamilyLength+1)}})
- assert.EqualError(t, err, "the length of the font family name must be smaller than or equal to 31")
+ assert.EqualError(t, err, ErrFontLength.Error())
_, err = f.NewStyle(&Style{Font: &Font{Size: MaxFontSize + 1}})
- assert.EqualError(t, err, "font size must be between 1 and 409 points")
+ assert.EqualError(t, err, ErrFontSize.Error())
// new numeric custom style
fmt := "####;####"
@@ -240,6 +243,15 @@ func TestNewStyle(t *testing.T) {
nf = f.Styles.CellXfs.Xf[styleID]
assert.Equal(t, 32, *nf.NumFmtID)
+
+ // Test set build-in scientific number format
+ styleID, err = f.NewStyle(&Style{NumFmt: 11})
+ assert.NoError(t, err)
+ assert.NoError(t, f.SetCellStyle("Sheet1", "A1", "B1", styleID))
+ assert.NoError(t, f.SetSheetRow("Sheet1", "A1", &[]float64{1.23, 1.234}))
+ rows, err := f.GetRows("Sheet1")
+ assert.NoError(t, err)
+ assert.Equal(t, [][]string{{"1.23E+00", "1.23E+00"}}, rows)
}
func TestGetDefaultFont(t *testing.T) {