From d0e5e731e862792323d1b48930ffecb78696cbc8 Mon Sep 17 00:00:00 2001 From: Adam Saleh Date: Tue, 11 Nov 2025 22:37:52 +0100 Subject: [PATCH 1/2] fix skipped column style bug in StreamWriter's SetRow --- stream.go | 2 +- stream_test.go | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/stream.go b/stream.go index aae41a5747..46c6a3e46c 100644 --- a/stream.go +++ b/stream.go @@ -413,7 +413,7 @@ func (sw *StreamWriter) SetRow(cell string, values []interface{}, opts ...RowOpt if err != nil { return err } - c := xlsxC{R: ref, S: sw.worksheet.prepareCellStyle(col, row, options.StyleID)} + c := xlsxC{R: ref, S: sw.worksheet.prepareCellStyle(col+i, row, options.StyleID)} var s int if v, ok := val.(Cell); ok { s, val = v.StyleID, v.Value diff --git a/stream_test.go b/stream_test.go index 1fa480a797..4960f54655 100644 --- a/stream_test.go +++ b/stream_test.go @@ -362,22 +362,38 @@ func TestStreamSetRowWithStyle(t *testing.T) { blueStyleID, err := file.NewStyle(&Style{Font: &Font{Color: "0000FF"}}) assert.NoError(t, err) - streamWriter, err := file.NewStreamWriter("Sheet1") + sheetName := "Sheet1" + err = file.SetColStyle(sheetName, "A", grayStyleID) + assert.NoError(t, err) + err = file.SetColStyle(sheetName, "C", blueStyleID) + assert.NoError(t, err) + + streamWriter, err := file.NewStreamWriter(sheetName) assert.NoError(t, err) assert.NoError(t, streamWriter.SetRow("A1", []interface{}{ - "value1", - Cell{Value: "value2"}, - &Cell{Value: "value2"}, - Cell{StyleID: blueStyleID, Value: "value3"}, - &Cell{StyleID: blueStyleID, Value: "value3"}, + "value11", + Cell{Value: "value12"}, + &Cell{Value: "value12"}, + Cell{StyleID: blueStyleID, Value: "value13"}, + &Cell{StyleID: blueStyleID, Value: "value13"}, }, RowOpts{StyleID: grayStyleID})) + assert.NoError(t, streamWriter.SetRow("A2", []interface{}{ + "value21", + Cell{Value: "value22"}, + &Cell{Value: "value22"}, + Cell{StyleID: grayStyleID, Value: "value23"}, + &Cell{StyleID: blueStyleID, Value: "value23"}, + })) assert.NoError(t, streamWriter.Flush()) - ws, err := file.workSheetReader("Sheet1") + ws, err := file.workSheetReader(sheetName) assert.NoError(t, err) for colIdx, expected := range []int{grayStyleID, grayStyleID, grayStyleID, blueStyleID, blueStyleID} { assert.Equal(t, expected, ws.SheetData.Row[0].C[colIdx].S) } + for colIdx, expected := range []int{grayStyleID, 0, blueStyleID, grayStyleID, blueStyleID} { + assert.Equal(t, expected, ws.SheetData.Row[1].C[colIdx].S) + } } func TestStreamSetCellValFunc(t *testing.T) { From 890b442a0e82e84c67898c6c857bf57c7c5b43a1 Mon Sep 17 00:00:00 2001 From: xuri Date: Wed, 12 Nov 2025 18:38:22 +0800 Subject: [PATCH 2/2] Using SetColStyle in TestStreamSetRowWithStyle unit test --- stream_test.go | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/stream_test.go b/stream_test.go index 4960f54655..e58e85d676 100644 --- a/stream_test.go +++ b/stream_test.go @@ -363,26 +363,23 @@ func TestStreamSetRowWithStyle(t *testing.T) { assert.NoError(t, err) sheetName := "Sheet1" - err = file.SetColStyle(sheetName, "A", grayStyleID) - assert.NoError(t, err) - err = file.SetColStyle(sheetName, "C", blueStyleID) - assert.NoError(t, err) - streamWriter, err := file.NewStreamWriter(sheetName) assert.NoError(t, err) + assert.NoError(t, streamWriter.SetColStyle(1, 1, grayStyleID)) + assert.NoError(t, streamWriter.SetColStyle(3, 3, blueStyleID)) assert.NoError(t, streamWriter.SetRow("A1", []interface{}{ - "value11", - Cell{Value: "value12"}, - &Cell{Value: "value12"}, - Cell{StyleID: blueStyleID, Value: "value13"}, - &Cell{StyleID: blueStyleID, Value: "value13"}, + "A1", + Cell{Value: "B1"}, + &Cell{Value: "C1"}, + Cell{StyleID: blueStyleID, Value: "D1"}, + &Cell{StyleID: blueStyleID, Value: "E1"}, }, RowOpts{StyleID: grayStyleID})) assert.NoError(t, streamWriter.SetRow("A2", []interface{}{ - "value21", - Cell{Value: "value22"}, - &Cell{Value: "value22"}, - Cell{StyleID: grayStyleID, Value: "value23"}, - &Cell{StyleID: blueStyleID, Value: "value23"}, + "A2", + Cell{Value: "B2"}, + &Cell{Value: "C2"}, + Cell{StyleID: grayStyleID, Value: "D2"}, + &Cell{StyleID: blueStyleID, Value: "E2"}, })) assert.NoError(t, streamWriter.Flush())