已验证 提交 52b1a8e8 编写于 作者: xurime's avatar xurime

- Function `SetCellValue()` time.Duration support added, relate issue #176;

- go test updated
上级 e13ccce8
...@@ -39,6 +39,7 @@ func (f *File) mergeCellsParser(xlsx *xlsxWorksheet, axis string) string { ...@@ -39,6 +39,7 @@ func (f *File) mergeCellsParser(xlsx *xlsxWorksheet, axis string) string {
// float64 // float64
// string // string
// []byte // []byte
// time.Duration
// time.Time // time.Time
// nil // nil
// //
...@@ -46,6 +47,30 @@ func (f *File) mergeCellsParser(xlsx *xlsxWorksheet, axis string) string { ...@@ -46,6 +47,30 @@ func (f *File) mergeCellsParser(xlsx *xlsxWorksheet, axis string) string {
// set numbers format by SetCellStyle() method. // set numbers format by SetCellStyle() method.
func (f *File) SetCellValue(sheet, axis string, value interface{}) { func (f *File) SetCellValue(sheet, axis string, value interface{}) {
switch t := value.(type) { switch t := value.(type) {
case float32:
f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float32)), 'f', -1, 32))
case float64:
f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float64)), 'f', -1, 64))
case string:
f.SetCellStr(sheet, axis, t)
case []byte:
f.SetCellStr(sheet, axis, string(t))
case time.Duration:
f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(time.Duration).Seconds()/86400), 'f', -1, 32))
f.setDefaultTimeStyle(sheet, axis, 21)
case time.Time:
f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(timeToExcelTime(timeToUTCTime(value.(time.Time)))), 'f', -1, 64))
f.setDefaultTimeStyle(sheet, axis, 22)
case nil:
f.SetCellStr(sheet, axis, "")
default:
f.setCellIntValue(sheet, axis, value)
}
}
// setCellIntValue provides function to set int value of a cell.
func (f *File) setCellIntValue(sheet, axis string, value interface{}) {
switch value.(type) {
case int: case int:
f.SetCellInt(sheet, axis, value.(int)) f.SetCellInt(sheet, axis, value.(int))
case int8: case int8:
...@@ -66,19 +91,6 @@ func (f *File) SetCellValue(sheet, axis string, value interface{}) { ...@@ -66,19 +91,6 @@ func (f *File) SetCellValue(sheet, axis string, value interface{}) {
f.SetCellInt(sheet, axis, int(value.(uint32))) f.SetCellInt(sheet, axis, int(value.(uint32)))
case uint64: case uint64:
f.SetCellInt(sheet, axis, int(value.(uint64))) f.SetCellInt(sheet, axis, int(value.(uint64)))
case float32:
f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float32)), 'f', -1, 32))
case float64:
f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(value.(float64)), 'f', -1, 64))
case string:
f.SetCellStr(sheet, axis, t)
case []byte:
f.SetCellStr(sheet, axis, string(t))
case time.Time:
f.SetCellDefault(sheet, axis, strconv.FormatFloat(float64(timeToExcelTime(timeToUTCTime(value.(time.Time)))), 'f', -1, 64))
f.setDefaultTimeStyle(sheet, axis)
case nil:
f.SetCellStr(sheet, axis, "")
default: default:
f.SetCellStr(sheet, axis, fmt.Sprintf("%v", value)) f.SetCellStr(sheet, axis, fmt.Sprintf("%v", value))
} }
......
...@@ -70,10 +70,11 @@ func OpenReader(r io.Reader) (*File, error) { ...@@ -70,10 +70,11 @@ func OpenReader(r io.Reader) (*File, error) {
} }
// setDefaultTimeStyle provides function to set default numbers format for // setDefaultTimeStyle provides function to set default numbers format for
// time.Time type cell value by given worksheet name and cell coordinates. // time.Time type cell value by given worksheet name, cell coordinates and
func (f *File) setDefaultTimeStyle(sheet, axis string) { // number format code.
func (f *File) setDefaultTimeStyle(sheet, axis string, format int) {
if f.GetCellStyle(sheet, axis) == 0 { if f.GetCellStyle(sheet, axis) == 0 {
style, _ := f.NewStyle(`{"number_format": 22}`) style, _ := f.NewStyle(`{"number_format": ` + strconv.Itoa(format) + `}`)
f.SetCellStyle(sheet, axis, axis, style) f.SetCellStyle(sheet, axis, axis, style)
} }
} }
......
...@@ -83,6 +83,8 @@ func TestOpenFile(t *testing.T) { ...@@ -83,6 +83,8 @@ func TestOpenFile(t *testing.T) {
xlsx.SetCellValue("Sheet2", "F16", true) xlsx.SetCellValue("Sheet2", "F16", true)
xlsx.SetCellValue("Sheet2", "G2", nil) xlsx.SetCellValue("Sheet2", "G2", nil)
xlsx.SetCellValue("Sheet2", "G4", time.Now()) xlsx.SetCellValue("Sheet2", "G4", time.Now())
// 02:46:40
xlsx.SetCellValue("Sheet2", "G5", time.Duration(1e13))
// Test completion column. // Test completion column.
xlsx.SetCellValue("Sheet2", "M2", nil) xlsx.SetCellValue("Sheet2", "M2", nil)
// Test read cell value with given axis large than exists row. // Test read cell value with given axis large than exists row.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册