summaryrefslogtreecommitdiff
path: root/cell.go
diff options
context:
space:
mode:
Diffstat (limited to 'cell.go')
-rw-r--r--cell.go83
1 files changed, 54 insertions, 29 deletions
diff --git a/cell.go b/cell.go
index 6a8eebe..4d22842 100644
--- a/cell.go
+++ b/cell.go
@@ -71,6 +71,38 @@ func (f *File) GetCellValue(sheet, axis string) (string, error) {
func (f *File) SetCellValue(sheet, axis string, value interface{}) error {
var err error
switch v := value.(type) {
+ case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
+ err = f.setCellIntFunc(sheet, axis, v)
+ case float32:
+ err = f.SetCellFloat(sheet, axis, float64(v), -1, 32)
+ case float64:
+ err = f.SetCellFloat(sheet, axis, v, -1, 64)
+ case string:
+ err = f.SetCellStr(sheet, axis, v)
+ case []byte:
+ err = f.SetCellStr(sheet, axis, string(v))
+ case time.Duration:
+ err = f.SetCellDefault(sheet, axis, strconv.FormatFloat(v.Seconds()/86400.0, 'f', -1, 32))
+ if err != nil {
+ return err
+ }
+ err = f.setDefaultTimeStyle(sheet, axis, 21)
+ case time.Time:
+ err = f.setCellTimeFunc(sheet, axis, v)
+ case bool:
+ err = f.SetCellBool(sheet, axis, v)
+ case nil:
+ err = f.SetCellStr(sheet, axis, "")
+ default:
+ err = f.SetCellStr(sheet, axis, fmt.Sprintf("%v", value))
+ }
+ return err
+}
+
+// setCellIntFunc is a wrapper of SetCellInt.
+func (f *File) setCellIntFunc(sheet, axis string, value interface{}) error {
+ var err error
+ switch v := value.(type) {
case int:
err = f.SetCellInt(sheet, axis, v)
case int8:
@@ -91,34 +123,31 @@ func (f *File) SetCellValue(sheet, axis string, value interface{}) error {
err = f.SetCellInt(sheet, axis, int(v))
case uint64:
err = f.SetCellInt(sheet, axis, int(v))
- case float32:
- err = f.SetCellFloat(sheet, axis, float64(v), -1, 32)
- case float64:
- err = f.SetCellFloat(sheet, axis, v, -1, 64)
- case string:
- err = f.SetCellStr(sheet, axis, v)
- case []byte:
- err = f.SetCellStr(sheet, axis, string(v))
- case time.Duration:
- err = f.SetCellDefault(sheet, axis, strconv.FormatFloat(v.Seconds()/86400.0, 'f', -1, 32))
- err = f.setDefaultTimeStyle(sheet, axis, 21)
- case time.Time:
- excelTime, err := timeToExcelTime(v)
+ }
+ return err
+}
+
+// setCellTimeFunc provides a method to process time type of value for
+// SetCellValue.
+func (f *File) setCellTimeFunc(sheet, axis string, value time.Time) error {
+ excelTime, err := timeToExcelTime(value)
+ if err != nil {
+ return err
+ }
+ if excelTime > 0 {
+ err = f.SetCellDefault(sheet, axis, strconv.FormatFloat(excelTime, 'f', -1, 64))
if err != nil {
return err
}
- if excelTime > 0 {
- err = f.SetCellDefault(sheet, axis, strconv.FormatFloat(excelTime, 'f', -1, 64))
- err = f.setDefaultTimeStyle(sheet, axis, 22)
- } else {
- err = f.SetCellStr(sheet, axis, v.Format(time.RFC3339Nano))
+ err = f.setDefaultTimeStyle(sheet, axis, 22)
+ if err != nil {
+ return err
+ }
+ } else {
+ err = f.SetCellStr(sheet, axis, value.Format(time.RFC3339Nano))
+ if err != nil {
+ return err
}
- case bool:
- err = f.SetCellBool(sheet, axis, v)
- case nil:
- err = f.SetCellStr(sheet, axis, "")
- default:
- err = f.SetCellStr(sheet, axis, fmt.Sprintf("%v", value))
}
return err
}
@@ -398,8 +427,6 @@ func (f *File) MergeCell(sheet, hcell, vcell string) error {
}
if xlsx.MergeCells != nil {
ref := hcell + ":" + vcell
- cells := make([]*xlsxMergeCell, 0, len(xlsx.MergeCells.Cells))
-
// Delete the merged cells of the overlapping area.
for _, cellData := range xlsx.MergeCells.Cells {
cc := strings.Split(cellData.Ref, ":")
@@ -413,10 +440,8 @@ func (f *File) MergeCell(sheet, hcell, vcell string) error {
if !(!c1 && !c2 && !c3 && !c4) {
return nil
}
- cells = append(cells, cellData)
}
- cells = append(xlsx.MergeCells.Cells, &xlsxMergeCell{Ref: ref})
- xlsx.MergeCells.Cells = cells
+ xlsx.MergeCells.Cells = append(xlsx.MergeCells.Cells, &xlsxMergeCell{Ref: ref})
} else {
xlsx.MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: hcell + ":" + vcell}}}
}