summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRi Xu <xuri.me@gmail.com>2018-01-05 09:39:31 +0800
committerRi Xu <xuri.me@gmail.com>2018-01-05 09:39:31 +0800
commit52b1a8e8963e9acfbabf76971656c0141b45ea9f (patch)
treee0e392dca30f79813b9f4ccb1dd1a4080ff0d438
parente13ccce89a786683b9871d6d0f9cc5b52ff1a406 (diff)
- Function `SetCellValue()` time.Duration support added, relate issue #176;
- go test updated
-rw-r--r--cell.go38
-rw-r--r--excelize.go7
-rw-r--r--excelize_test.go2
3 files changed, 31 insertions, 16 deletions
diff --git a/cell.go b/cell.go
index df2ea57..5d26338 100644
--- a/cell.go
+++ b/cell.go
@@ -39,6 +39,7 @@ func (f *File) mergeCellsParser(xlsx *xlsxWorksheet, axis string) string {
// float64
// string
// []byte
+// time.Duration
// time.Time
// nil
//
@@ -46,6 +47,30 @@ func (f *File) mergeCellsParser(xlsx *xlsxWorksheet, axis string) string {
// set numbers format by SetCellStyle() method.
func (f *File) SetCellValue(sheet, axis string, value interface{}) {
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:
f.SetCellInt(sheet, axis, value.(int))
case int8:
@@ -66,19 +91,6 @@ func (f *File) SetCellValue(sheet, axis string, value interface{}) {
f.SetCellInt(sheet, axis, int(value.(uint32)))
case 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:
f.SetCellStr(sheet, axis, fmt.Sprintf("%v", value))
}
diff --git a/excelize.go b/excelize.go
index b3abc30..0b1e410 100644
--- a/excelize.go
+++ b/excelize.go
@@ -70,10 +70,11 @@ func OpenReader(r io.Reader) (*File, error) {
}
// setDefaultTimeStyle provides function to set default numbers format for
-// time.Time type cell value by given worksheet name and cell coordinates.
-func (f *File) setDefaultTimeStyle(sheet, axis string) {
+// time.Time type cell value by given worksheet name, cell coordinates and
+// number format code.
+func (f *File) setDefaultTimeStyle(sheet, axis string, format int) {
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)
}
}
diff --git a/excelize_test.go b/excelize_test.go
index 3e5665f..34dac8d 100644
--- a/excelize_test.go
+++ b/excelize_test.go
@@ -83,6 +83,8 @@ func TestOpenFile(t *testing.T) {
xlsx.SetCellValue("Sheet2", "F16", true)
xlsx.SetCellValue("Sheet2", "G2", nil)
xlsx.SetCellValue("Sheet2", "G4", time.Now())
+ // 02:46:40
+ xlsx.SetCellValue("Sheet2", "G5", time.Duration(1e13))
// Test completion column.
xlsx.SetCellValue("Sheet2", "M2", nil)
// Test read cell value with given axis large than exists row.