diff options
author | xuri <xuri.me@gmail.com> | 2020-08-14 16:09:50 +0000 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2020-08-15 09:19:35 +0000 |
commit | c3e92a51d744bc8420e0626b06ee3a0efd030341 (patch) | |
tree | 3ddf72f53711ae898baf584287d6b4b7ad4276b9 /cell.go | |
parent | cb6f8852bb764ffc1f9b637faaf594353476e17c (diff) |
Compatible with Go 1.15, fix unit test failed on Windows and fixed #689 potential race condition
Diffstat (limited to 'cell.go')
-rw-r--r-- | cell.go | 20 |
1 files changed, 7 insertions, 13 deletions
@@ -18,7 +18,6 @@ import ( "reflect" "strconv" "strings" - "sync" "time" ) @@ -33,8 +32,6 @@ const ( STCellFormulaTypeShared = "shared" ) -var rwMutex sync.RWMutex - // GetCellValue provides a function to get formatted value from cell by given // worksheet name and axis in XLSX file. If it is possible to apply a format // to the cell value, it will do so, if not then an error will be returned, @@ -181,8 +178,6 @@ func setCellDuration(value time.Duration) (t string, v string) { // SetCellInt provides a function to set int type value of a cell by given // worksheet name, cell coordinates and cell value. func (f *File) SetCellInt(sheet, axis string, value int) error { - rwMutex.Lock() - defer rwMutex.Unlock() xlsx, err := f.workSheetReader(sheet) if err != nil { return err @@ -204,8 +199,6 @@ func setCellInt(value int) (t string, v string) { // SetCellBool provides a function to set bool type value of a cell by given // worksheet name, cell name and cell value. func (f *File) SetCellBool(sheet, axis string, value bool) error { - rwMutex.Lock() - defer rwMutex.Unlock() xlsx, err := f.workSheetReader(sheet) if err != nil { return err @@ -239,8 +232,6 @@ func setCellBool(value bool) (t string, v string) { // f.SetCellFloat("Sheet1", "A1", float64(x), 2, 32) // func (f *File) SetCellFloat(sheet, axis string, value float64, prec, bitSize int) error { - rwMutex.Lock() - defer rwMutex.Unlock() xlsx, err := f.workSheetReader(sheet) if err != nil { return err @@ -262,8 +253,6 @@ func setCellFloat(value float64, prec, bitSize int) (t string, v string) { // SetCellStr provides a function to set string type value of a cell. Total // number of characters that a cell can contain 32767 characters. func (f *File) SetCellStr(sheet, axis, value string) error { - rwMutex.Lock() - defer rwMutex.Unlock() xlsx, err := f.workSheetReader(sheet) if err != nil { return err @@ -291,6 +280,8 @@ func (f *File) setCellString(value string) (t string, v string) { // setSharedString provides a function to add string to the share string table. func (f *File) setSharedString(val string) int { sst := f.sharedStringsReader() + f.Lock() + defer f.Unlock() if i, ok := f.sharedStringsMap[val]; ok { return i } @@ -371,8 +362,6 @@ type FormulaOpts struct { // SetCellFormula provides a function to set cell formula by given string and // worksheet name. func (f *File) SetCellFormula(sheet, axis, formula string, opts ...FormulaOpts) error { - rwMutex.Lock() - defer rwMutex.Unlock() xlsx, err := f.workSheetReader(sheet) if err != nil { return err @@ -697,6 +686,8 @@ func (f *File) SetSheetRow(sheet, axis string, slice interface{}) error { // getCellInfo does common preparation for all SetCell* methods. func (f *File) prepareCell(xlsx *xlsxWorksheet, sheet, cell string) (*xlsxC, int, int, error) { + xlsx.Lock() + defer xlsx.Unlock() var err error cell, err = f.mergeCellsParser(xlsx, cell) if err != nil { @@ -728,6 +719,9 @@ func (f *File) getCellStringFunc(sheet, axis string, fn func(x *xlsxWorksheet, c return "", err } + xlsx.Lock() + defer xlsx.Unlock() + lastRowNum := 0 if l := len(xlsx.SheetData.Row); l > 0 { lastRowNum = xlsx.SheetData.Row[l-1].R |