diff options
author | xuri <xuri.me@gmail.com> | 2021-12-31 00:00:01 +0800 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2021-12-31 00:00:01 +0800 |
commit | e37e060d6f97274c1e967cea40609623493bce25 (patch) | |
tree | c40a114bf545dfe0290e83fd5f81f27ca3ac55d7 | |
parent | c5990ea3484932fd6066c04e36c63735889a8228 (diff) |
This closes #1107, stream writer will create a time number format for time type cells
Unit test coverage improved
-rw-r--r-- | cell.go | 6 | ||||
-rw-r--r-- | stream.go | 11 | ||||
-rw-r--r-- | stream_test.go | 43 |
3 files changed, 33 insertions, 27 deletions
@@ -228,8 +228,7 @@ func setCellTime(value time.Time) (t string, b string, isNum bool, err error) { var excelTime float64 _, offset := value.In(value.Location()).Zone() value = value.Add(time.Duration(offset) * time.Second) - excelTime, err = timeToExcelTime(value) - if err != nil { + if excelTime, err = timeToExcelTime(value); err != nil { return } isNum = excelTime > 0 @@ -419,8 +418,7 @@ func setCellStr(value string) (t string, v string, ns xml.Attr) { } } } - t = "str" - v = bstrMarshal(value) + t, v = "str", bstrMarshal(value) return } @@ -341,7 +341,7 @@ func (sw *StreamWriter) SetRow(axis string, values []interface{}, opts ...RowOpt val = v.Value setCellFormula(&c, v.Formula) } - if err = setCellValFunc(&c, val); err != nil { + if err = sw.setCellValFunc(&c, val); err != nil { _, _ = sw.rawData.WriteString(`</row>`) return err } @@ -424,7 +424,7 @@ func setCellFormula(c *xlsxC, formula string) { } // setCellValFunc provides a function to set value of a cell. -func setCellValFunc(c *xlsxC, val interface{}) (err error) { +func (sw *StreamWriter) setCellValFunc(c *xlsxC, val interface{}) (err error) { switch val := val.(type) { case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64: err = setCellIntFunc(c, val) @@ -439,7 +439,12 @@ func setCellValFunc(c *xlsxC, val interface{}) (err error) { case time.Duration: c.T, c.V = setCellDuration(val) case time.Time: - c.T, c.V, _, err = setCellTime(val) + var isNum bool + c.T, c.V, isNum, err = setCellTime(val) + if isNum && c.S == 0 { + style, _ := sw.File.NewStyle(&Style{NumFmt: 22}) + c.S = style + } case bool: c.T, c.V = setCellBool(val) case nil: diff --git a/stream_test.go b/stream_test.go index 833a00a..dd1be8a 100644 --- a/stream_test.go +++ b/stream_test.go @@ -58,7 +58,7 @@ func TestStreamWriter(t *testing.T) { assert.NoError(t, streamWriter.SetRow("A4", []interface{}{Cell{StyleID: styleID}, Cell{Formula: "SUM(A10,B10)"}}), RowOpts{Height: 45, StyleID: styleID}) assert.NoError(t, streamWriter.SetRow("A5", []interface{}{&Cell{StyleID: styleID, Value: "cell"}, &Cell{Formula: "SUM(A10,B10)"}})) assert.NoError(t, streamWriter.SetRow("A6", []interface{}{time.Now()})) - assert.NoError(t, streamWriter.SetRow("A7", nil, RowOpts{Hidden: true})) + assert.NoError(t, streamWriter.SetRow("A7", nil, RowOpts{Height: 20, Hidden: true, StyleID: styleID})) assert.EqualError(t, streamWriter.SetRow("A7", nil, RowOpts{Height: MaxRowHeight + 1}), ErrMaxRowHeight.Error()) for rowID := 10; rowID <= 51200; rowID++ { @@ -208,24 +208,27 @@ func TestSetRow(t *testing.T) { } func TestSetCellValFunc(t *testing.T) { + f := NewFile() + sw, err := f.NewStreamWriter("Sheet1") + assert.NoError(t, err) c := &xlsxC{} - assert.NoError(t, setCellValFunc(c, 128)) - assert.NoError(t, setCellValFunc(c, int8(-128))) - assert.NoError(t, setCellValFunc(c, int16(-32768))) - assert.NoError(t, setCellValFunc(c, int32(-2147483648))) - assert.NoError(t, setCellValFunc(c, int64(-9223372036854775808))) - assert.NoError(t, setCellValFunc(c, uint(128))) - assert.NoError(t, setCellValFunc(c, uint8(255))) - assert.NoError(t, setCellValFunc(c, uint16(65535))) - assert.NoError(t, setCellValFunc(c, uint32(4294967295))) - assert.NoError(t, setCellValFunc(c, uint64(18446744073709551615))) - assert.NoError(t, setCellValFunc(c, float32(100.1588))) - assert.NoError(t, setCellValFunc(c, float64(100.1588))) - assert.NoError(t, setCellValFunc(c, " Hello")) - assert.NoError(t, setCellValFunc(c, []byte(" Hello"))) - assert.NoError(t, setCellValFunc(c, time.Now().UTC())) - assert.NoError(t, setCellValFunc(c, time.Duration(1e13))) - assert.NoError(t, setCellValFunc(c, true)) - assert.NoError(t, setCellValFunc(c, nil)) - assert.NoError(t, setCellValFunc(c, complex64(5+10i))) + assert.NoError(t, sw.setCellValFunc(c, 128)) + assert.NoError(t, sw.setCellValFunc(c, int8(-128))) + assert.NoError(t, sw.setCellValFunc(c, int16(-32768))) + assert.NoError(t, sw.setCellValFunc(c, int32(-2147483648))) + assert.NoError(t, sw.setCellValFunc(c, int64(-9223372036854775808))) + assert.NoError(t, sw.setCellValFunc(c, uint(128))) + assert.NoError(t, sw.setCellValFunc(c, uint8(255))) + assert.NoError(t, sw.setCellValFunc(c, uint16(65535))) + assert.NoError(t, sw.setCellValFunc(c, uint32(4294967295))) + assert.NoError(t, sw.setCellValFunc(c, uint64(18446744073709551615))) + assert.NoError(t, sw.setCellValFunc(c, float32(100.1588))) + assert.NoError(t, sw.setCellValFunc(c, float64(100.1588))) + assert.NoError(t, sw.setCellValFunc(c, " Hello")) + assert.NoError(t, sw.setCellValFunc(c, []byte(" Hello"))) + assert.NoError(t, sw.setCellValFunc(c, time.Now().UTC())) + assert.NoError(t, sw.setCellValFunc(c, time.Duration(1e13))) + assert.NoError(t, sw.setCellValFunc(c, true)) + assert.NoError(t, sw.setCellValFunc(c, nil)) + assert.NoError(t, sw.setCellValFunc(c, complex64(5+10i))) } |