@@ -200,12 +200,12 @@ func (f *File) setCellTimeFunc(sheet, axis string, value time.Time) error {
200
200
if err != nil {
201
201
return err
202
202
}
203
- cellData , col , _ , err := f .prepareCell (ws , sheet , axis )
203
+ cellData , col , row , err := f .prepareCell (ws , sheet , axis )
204
204
if err != nil {
205
205
return err
206
206
}
207
207
ws .Lock ()
208
- cellData .S = f .prepareCellStyle (ws , col , cellData .S )
208
+ cellData .S = f .prepareCellStyle (ws , col , row , cellData .S )
209
209
ws .Unlock ()
210
210
211
211
var isNum bool
@@ -214,10 +214,7 @@ func (f *File) setCellTimeFunc(sheet, axis string, value time.Time) error {
214
214
return err
215
215
}
216
216
if isNum {
217
- err = f .setDefaultTimeStyle (sheet , axis , 22 )
218
- if err != nil {
219
- return err
220
- }
217
+ _ = f .setDefaultTimeStyle (sheet , axis , 22 )
221
218
}
222
219
return err
223
220
}
@@ -254,13 +251,13 @@ func (f *File) SetCellInt(sheet, axis string, value int) error {
254
251
if err != nil {
255
252
return err
256
253
}
257
- cellData , col , _ , err := f .prepareCell (ws , sheet , axis )
254
+ cellData , col , row , err := f .prepareCell (ws , sheet , axis )
258
255
if err != nil {
259
256
return err
260
257
}
261
258
ws .Lock ()
262
259
defer ws .Unlock ()
263
- cellData .S = f .prepareCellStyle (ws , col , cellData .S )
260
+ cellData .S = f .prepareCellStyle (ws , col , row , cellData .S )
264
261
cellData .T , cellData .V = setCellInt (value )
265
262
return err
266
263
}
@@ -279,13 +276,13 @@ func (f *File) SetCellBool(sheet, axis string, value bool) error {
279
276
if err != nil {
280
277
return err
281
278
}
282
- cellData , col , _ , err := f .prepareCell (ws , sheet , axis )
279
+ cellData , col , row , err := f .prepareCell (ws , sheet , axis )
283
280
if err != nil {
284
281
return err
285
282
}
286
283
ws .Lock ()
287
284
defer ws .Unlock ()
288
- cellData .S = f .prepareCellStyle (ws , col , cellData .S )
285
+ cellData .S = f .prepareCellStyle (ws , col , row , cellData .S )
289
286
cellData .T , cellData .V = setCellBool (value )
290
287
return err
291
288
}
@@ -316,13 +313,13 @@ func (f *File) SetCellFloat(sheet, axis string, value float64, prec, bitSize int
316
313
if err != nil {
317
314
return err
318
315
}
319
- cellData , col , _ , err := f .prepareCell (ws , sheet , axis )
316
+ cellData , col , row , err := f .prepareCell (ws , sheet , axis )
320
317
if err != nil {
321
318
return err
322
319
}
323
320
ws .Lock ()
324
321
defer ws .Unlock ()
325
- cellData .S = f .prepareCellStyle (ws , col , cellData .S )
322
+ cellData .S = f .prepareCellStyle (ws , col , row , cellData .S )
326
323
cellData .T , cellData .V = setCellFloat (value , prec , bitSize )
327
324
return err
328
325
}
@@ -341,13 +338,13 @@ func (f *File) SetCellStr(sheet, axis, value string) error {
341
338
if err != nil {
342
339
return err
343
340
}
344
- cellData , col , _ , err := f .prepareCell (ws , sheet , axis )
341
+ cellData , col , row , err := f .prepareCell (ws , sheet , axis )
345
342
if err != nil {
346
343
return err
347
344
}
348
345
ws .Lock ()
349
346
defer ws .Unlock ()
350
- cellData .S = f .prepareCellStyle (ws , col , cellData .S )
347
+ cellData .S = f .prepareCellStyle (ws , col , row , cellData .S )
351
348
cellData .T , cellData .V , err = f .setCellString (value )
352
349
return err
353
350
}
@@ -439,13 +436,13 @@ func (f *File) SetCellDefault(sheet, axis, value string) error {
439
436
if err != nil {
440
437
return err
441
438
}
442
- cellData , col , _ , err := f .prepareCell (ws , sheet , axis )
439
+ cellData , col , row , err := f .prepareCell (ws , sheet , axis )
443
440
if err != nil {
444
441
return err
445
442
}
446
443
ws .Lock ()
447
444
defer ws .Unlock ()
448
- cellData .S = f .prepareCellStyle (ws , col , cellData .S )
445
+ cellData .S = f .prepareCellStyle (ws , col , row , cellData .S )
449
446
cellData .T , cellData .V = setCellDefault (value )
450
447
return err
451
448
}
@@ -937,14 +934,14 @@ func (f *File) SetCellRichText(sheet, cell string, runs []RichTextRun) error {
937
934
if err != nil {
938
935
return err
939
936
}
940
- cellData , col , _ , err := f .prepareCell (ws , sheet , cell )
937
+ cellData , col , row , err := f .prepareCell (ws , sheet , cell )
941
938
if err != nil {
942
939
return err
943
940
}
944
941
if err := f .sharedStringsLoader (); err != nil {
945
942
return err
946
943
}
947
- cellData .S = f .prepareCellStyle (ws , col , cellData .S )
944
+ cellData .S = f .prepareCellStyle (ws , col , row , cellData .S )
948
945
si := xlsxSI {}
949
946
sst := f .sharedStringsReader ()
950
947
textRuns := []xlsxR {}
@@ -1133,14 +1130,19 @@ func isTimeNumFmt(format string) bool {
1133
1130
1134
1131
// prepareCellStyle provides a function to prepare style index of cell in
1135
1132
// worksheet by given column index and style index.
1136
- func (f * File ) prepareCellStyle (ws * xlsxWorksheet , col , style int ) int {
1133
+ func (f * File ) prepareCellStyle (ws * xlsxWorksheet , col , row , style int ) int {
1137
1134
if ws .Cols != nil && style == 0 {
1138
1135
for _ , c := range ws .Cols .Col {
1139
- if c .Min <= col && col <= c .Max {
1140
- style = c .Style
1136
+ if c .Min <= col && col <= c .Max && c . Style != 0 {
1137
+ return c .Style
1141
1138
}
1142
1139
}
1143
1140
}
1141
+ for rowIdx := range ws .SheetData .Row {
1142
+ if styleID := ws .SheetData .Row [rowIdx ].S ; style == 0 && styleID != 0 {
1143
+ return styleID
1144
+ }
1145
+ }
1144
1146
return style
1145
1147
}
1146
1148
@@ -1150,6 +1152,11 @@ func (f *File) mergeCellsParser(ws *xlsxWorksheet, axis string) (string, error)
1150
1152
axis = strings .ToUpper (axis )
1151
1153
if ws .MergeCells != nil {
1152
1154
for i := 0 ; i < len (ws .MergeCells .Cells ); i ++ {
1155
+ if ws .MergeCells .Cells [i ] == nil {
1156
+ ws .MergeCells .Cells = append (ws .MergeCells .Cells [:i ], ws .MergeCells .Cells [i + 1 :]... )
1157
+ i --
1158
+ continue
1159
+ }
1153
1160
ok , err := f .checkCellInArea (axis , ws .MergeCells .Cells [i ].Ref )
1154
1161
if err != nil {
1155
1162
return axis , err
@@ -1170,8 +1177,7 @@ func (f *File) checkCellInArea(cell, area string) (bool, error) {
1170
1177
return false , err
1171
1178
}
1172
1179
1173
- rng := strings .Split (area , ":" )
1174
- if len (rng ) != 2 {
1180
+ if rng := strings .Split (area , ":" ); len (rng ) != 2 {
1175
1181
return false , err
1176
1182
}
1177
1183
coordinates , err := areaRefToCoordinates (area )
0 commit comments