Skip to content

Commit e37e060

Browse files
committed
This closes qax-os#1107, stream writer will create a time number format for time type cells
Unit test coverage improved
1 parent c5990ea commit e37e060

File tree

3 files changed

+33
-27
lines changed

3 files changed

+33
-27
lines changed

cell.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,7 @@ func setCellTime(value time.Time) (t string, b string, isNum bool, err error) {
228228
var excelTime float64
229229
_, offset := value.In(value.Location()).Zone()
230230
value = value.Add(time.Duration(offset) * time.Second)
231-
excelTime, err = timeToExcelTime(value)
232-
if err != nil {
231+
if excelTime, err = timeToExcelTime(value); err != nil {
233232
return
234233
}
235234
isNum = excelTime > 0
@@ -419,8 +418,7 @@ func setCellStr(value string) (t string, v string, ns xml.Attr) {
419418
}
420419
}
421420
}
422-
t = "str"
423-
v = bstrMarshal(value)
421+
t, v = "str", bstrMarshal(value)
424422
return
425423
}
426424

stream.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ func (sw *StreamWriter) SetRow(axis string, values []interface{}, opts ...RowOpt
341341
val = v.Value
342342
setCellFormula(&c, v.Formula)
343343
}
344-
if err = setCellValFunc(&c, val); err != nil {
344+
if err = sw.setCellValFunc(&c, val); err != nil {
345345
_, _ = sw.rawData.WriteString(`</row>`)
346346
return err
347347
}
@@ -424,7 +424,7 @@ func setCellFormula(c *xlsxC, formula string) {
424424
}
425425

426426
// setCellValFunc provides a function to set value of a cell.
427-
func setCellValFunc(c *xlsxC, val interface{}) (err error) {
427+
func (sw *StreamWriter) setCellValFunc(c *xlsxC, val interface{}) (err error) {
428428
switch val := val.(type) {
429429
case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
430430
err = setCellIntFunc(c, val)
@@ -439,7 +439,12 @@ func setCellValFunc(c *xlsxC, val interface{}) (err error) {
439439
case time.Duration:
440440
c.T, c.V = setCellDuration(val)
441441
case time.Time:
442-
c.T, c.V, _, err = setCellTime(val)
442+
var isNum bool
443+
c.T, c.V, isNum, err = setCellTime(val)
444+
if isNum && c.S == 0 {
445+
style, _ := sw.File.NewStyle(&Style{NumFmt: 22})
446+
c.S = style
447+
}
443448
case bool:
444449
c.T, c.V = setCellBool(val)
445450
case nil:

stream_test.go

+23-20
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func TestStreamWriter(t *testing.T) {
5858
assert.NoError(t, streamWriter.SetRow("A4", []interface{}{Cell{StyleID: styleID}, Cell{Formula: "SUM(A10,B10)"}}), RowOpts{Height: 45, StyleID: styleID})
5959
assert.NoError(t, streamWriter.SetRow("A5", []interface{}{&Cell{StyleID: styleID, Value: "cell"}, &Cell{Formula: "SUM(A10,B10)"}}))
6060
assert.NoError(t, streamWriter.SetRow("A6", []interface{}{time.Now()}))
61-
assert.NoError(t, streamWriter.SetRow("A7", nil, RowOpts{Hidden: true}))
61+
assert.NoError(t, streamWriter.SetRow("A7", nil, RowOpts{Height: 20, Hidden: true, StyleID: styleID}))
6262
assert.EqualError(t, streamWriter.SetRow("A7", nil, RowOpts{Height: MaxRowHeight + 1}), ErrMaxRowHeight.Error())
6363

6464
for rowID := 10; rowID <= 51200; rowID++ {
@@ -208,24 +208,27 @@ func TestSetRow(t *testing.T) {
208208
}
209209

210210
func TestSetCellValFunc(t *testing.T) {
211+
f := NewFile()
212+
sw, err := f.NewStreamWriter("Sheet1")
213+
assert.NoError(t, err)
211214
c := &xlsxC{}
212-
assert.NoError(t, setCellValFunc(c, 128))
213-
assert.NoError(t, setCellValFunc(c, int8(-128)))
214-
assert.NoError(t, setCellValFunc(c, int16(-32768)))
215-
assert.NoError(t, setCellValFunc(c, int32(-2147483648)))
216-
assert.NoError(t, setCellValFunc(c, int64(-9223372036854775808)))
217-
assert.NoError(t, setCellValFunc(c, uint(128)))
218-
assert.NoError(t, setCellValFunc(c, uint8(255)))
219-
assert.NoError(t, setCellValFunc(c, uint16(65535)))
220-
assert.NoError(t, setCellValFunc(c, uint32(4294967295)))
221-
assert.NoError(t, setCellValFunc(c, uint64(18446744073709551615)))
222-
assert.NoError(t, setCellValFunc(c, float32(100.1588)))
223-
assert.NoError(t, setCellValFunc(c, float64(100.1588)))
224-
assert.NoError(t, setCellValFunc(c, " Hello"))
225-
assert.NoError(t, setCellValFunc(c, []byte(" Hello")))
226-
assert.NoError(t, setCellValFunc(c, time.Now().UTC()))
227-
assert.NoError(t, setCellValFunc(c, time.Duration(1e13)))
228-
assert.NoError(t, setCellValFunc(c, true))
229-
assert.NoError(t, setCellValFunc(c, nil))
230-
assert.NoError(t, setCellValFunc(c, complex64(5+10i)))
215+
assert.NoError(t, sw.setCellValFunc(c, 128))
216+
assert.NoError(t, sw.setCellValFunc(c, int8(-128)))
217+
assert.NoError(t, sw.setCellValFunc(c, int16(-32768)))
218+
assert.NoError(t, sw.setCellValFunc(c, int32(-2147483648)))
219+
assert.NoError(t, sw.setCellValFunc(c, int64(-9223372036854775808)))
220+
assert.NoError(t, sw.setCellValFunc(c, uint(128)))
221+
assert.NoError(t, sw.setCellValFunc(c, uint8(255)))
222+
assert.NoError(t, sw.setCellValFunc(c, uint16(65535)))
223+
assert.NoError(t, sw.setCellValFunc(c, uint32(4294967295)))
224+
assert.NoError(t, sw.setCellValFunc(c, uint64(18446744073709551615)))
225+
assert.NoError(t, sw.setCellValFunc(c, float32(100.1588)))
226+
assert.NoError(t, sw.setCellValFunc(c, float64(100.1588)))
227+
assert.NoError(t, sw.setCellValFunc(c, " Hello"))
228+
assert.NoError(t, sw.setCellValFunc(c, []byte(" Hello")))
229+
assert.NoError(t, sw.setCellValFunc(c, time.Now().UTC()))
230+
assert.NoError(t, sw.setCellValFunc(c, time.Duration(1e13)))
231+
assert.NoError(t, sw.setCellValFunc(c, true))
232+
assert.NoError(t, sw.setCellValFunc(c, nil))
233+
assert.NoError(t, sw.setCellValFunc(c, complex64(5+10i)))
231234
}

0 commit comments

Comments
 (0)