summaryrefslogtreecommitdiff
path: root/cell.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2021-07-07 00:57:43 +0800
committerxuri <xuri.me@gmail.com>2021-07-07 00:57:43 +0800
commit90d200a10ba4d8c2ae2eff47ad8e1cca0ab28e76 (patch)
tree7579365b99b61562404ced4d71058b917b92f003 /cell.go
parentb7fece51736977e7d84aca30ecce7f6b3a1251f2 (diff)
Make the functions `SetSheetRow`, `New Style` and `SetCellStyle` concurrency safety
Diffstat (limited to 'cell.go')
-rw-r--r--cell.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/cell.go b/cell.go
index 1d08c8a..82e93c5 100644
--- a/cell.go
+++ b/cell.go
@@ -139,7 +139,9 @@ func (f *File) setCellTimeFunc(sheet, axis string, value time.Time) error {
if err != nil {
return err
}
+ ws.Lock()
cellData.S = f.prepareCellStyle(ws, col, cellData.S)
+ ws.Unlock()
var isNum bool
cellData.T, cellData.V, isNum, err = setCellTime(value)
@@ -155,6 +157,8 @@ func (f *File) setCellTimeFunc(sheet, axis string, value time.Time) error {
return err
}
+// setCellTime prepares cell type and Excel time by given Go time.Time type
+// timestamp.
func setCellTime(value time.Time) (t string, b string, isNum bool, err error) {
var excelTime float64
excelTime, err = timeToExcelTime(value)
@@ -170,6 +174,8 @@ func setCellTime(value time.Time) (t string, b string, isNum bool, err error) {
return
}
+// setCellDuration prepares cell type and value by given Go time.Duration type
+// time duration.
func setCellDuration(value time.Duration) (t string, v string) {
v = strconv.FormatFloat(value.Seconds()/86400.0, 'f', -1, 32)
return
@@ -193,6 +199,8 @@ func (f *File) SetCellInt(sheet, axis string, value int) error {
return err
}
+// setCellInt prepares cell type and string type cell value by a given
+// integer.
func setCellInt(value int) (t string, v string) {
v = strconv.Itoa(value)
return
@@ -209,11 +217,15 @@ func (f *File) SetCellBool(sheet, axis string, value bool) error {
if err != nil {
return err
}
+ ws.Lock()
+ defer ws.Unlock()
cellData.S = f.prepareCellStyle(ws, col, cellData.S)
cellData.T, cellData.V = setCellBool(value)
return err
}
+// setCellBool prepares cell type and string type cell value by a given
+// boolean value.
func setCellBool(value bool) (t string, v string) {
t = "b"
if value {
@@ -242,11 +254,15 @@ func (f *File) SetCellFloat(sheet, axis string, value float64, prec, bitSize int
if err != nil {
return err
}
+ ws.Lock()
+ defer ws.Unlock()
cellData.S = f.prepareCellStyle(ws, col, cellData.S)
cellData.T, cellData.V = setCellFloat(value, prec, bitSize)
return err
}
+// setCellFloat prepares cell type and string type cell value by a given
+// float value.
func setCellFloat(value float64, prec, bitSize int) (t string, v string) {
v = strconv.FormatFloat(value, 'f', prec, bitSize)
return
@@ -334,11 +350,15 @@ func (f *File) SetCellDefault(sheet, axis, value string) error {
if err != nil {
return err
}
+ ws.Lock()
+ defer ws.Unlock()
cellData.S = f.prepareCellStyle(ws, col, cellData.S)
cellData.T, cellData.V = setCellDefault(value)
return err
}
+// setCellDefault prepares cell type and string type cell value by a given
+// string.
func setCellDefault(value string) (t string, v string) {
v = value
return