Skip to content

Commit d21b598

Browse files
committed
This closes qax-os#1968, closes qax-os#1969
- Fix missing conditional formatting after remove column - Fix the SetSheetVisible function panic on none views sheet - Updated unit tests
1 parent 30c4cd7 commit d21b598

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

adjust.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,12 +259,12 @@ func (f *File) adjustCellRef(cellRef string, dir adjustDirection, num, offset in
259259
return "", err
260260
}
261261
if dir == columns {
262-
if offset < 0 && coordinates[0] == coordinates[2] {
262+
if offset < 0 && coordinates[0] == coordinates[2] && num == coordinates[0] {
263263
continue
264264
}
265265
coordinates = applyOffset(coordinates, 0, 2, MaxColumns)
266266
} else {
267-
if offset < 0 && coordinates[1] == coordinates[3] {
267+
if offset < 0 && coordinates[1] == coordinates[3] && num == coordinates[1] {
268268
continue
269269
}
270270
coordinates = applyOffset(coordinates, 1, 3, TotalRows)

adjust_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,57 @@ func TestAdjustConditionalFormats(t *testing.T) {
10201020

10211021
ws.(*xlsxWorksheet).ConditionalFormatting[0] = nil
10221022
assert.NoError(t, f.RemoveCol("Sheet1", "B"))
1023+
1024+
t.Run("for_remove_conditional_formats_column", func(t *testing.T) {
1025+
f := NewFile()
1026+
format := []ConditionalFormatOptions{{
1027+
Type: "data_bar",
1028+
Criteria: "=",
1029+
MinType: "min",
1030+
MaxType: "max",
1031+
BarColor: "#638EC6",
1032+
}}
1033+
assert.NoError(t, f.SetConditionalFormat("Sheet1", "D2:D3", format))
1034+
assert.NoError(t, f.SetConditionalFormat("Sheet1", "D5", format))
1035+
assert.NoError(t, f.RemoveCol("Sheet1", "D"))
1036+
opts, err := f.GetConditionalFormats("Sheet1")
1037+
assert.NoError(t, err)
1038+
assert.Len(t, opts, 0)
1039+
})
1040+
t.Run("for_remove_conditional_formats_row", func(t *testing.T) {
1041+
f := NewFile()
1042+
format := []ConditionalFormatOptions{{
1043+
Type: "data_bar",
1044+
Criteria: "=",
1045+
MinType: "min",
1046+
MaxType: "max",
1047+
BarColor: "#638EC6",
1048+
}}
1049+
assert.NoError(t, f.SetConditionalFormat("Sheet1", "D2:E2", format))
1050+
assert.NoError(t, f.SetConditionalFormat("Sheet1", "F2", format))
1051+
assert.NoError(t, f.RemoveRow("Sheet1", 2))
1052+
opts, err := f.GetConditionalFormats("Sheet1")
1053+
assert.NoError(t, err)
1054+
assert.Len(t, opts, 0)
1055+
})
1056+
t.Run("for_adjust_conditional_formats_row", func(t *testing.T) {
1057+
f := NewFile()
1058+
format := []ConditionalFormatOptions{{
1059+
Type: "data_bar",
1060+
Criteria: "=",
1061+
MinType: "min",
1062+
MaxType: "max",
1063+
BarColor: "#638EC6",
1064+
}}
1065+
assert.NoError(t, f.SetConditionalFormat("Sheet1", "D2:D3", format))
1066+
assert.NoError(t, f.SetConditionalFormat("Sheet1", "D5", format))
1067+
assert.NoError(t, f.RemoveRow("Sheet1", 1))
1068+
opts, err := f.GetConditionalFormats("Sheet1")
1069+
assert.NoError(t, err)
1070+
assert.Len(t, opts, 2)
1071+
assert.Equal(t, format, opts["D1:D2"])
1072+
assert.Equal(t, format, opts["D4:D4"])
1073+
})
10231074
}
10241075

10251076
func TestAdjustDataValidations(t *testing.T) {

sheet.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,11 @@ func (f *File) SetSheetVisible(sheet string, visible bool, veryHidden ...bool) e
773773
return err
774774
}
775775
tabSelected := false
776+
if ws.SheetViews == nil {
777+
ws.SheetViews = &xlsxSheetViews{
778+
SheetView: []xlsxSheetView{{WorkbookViewID: 0}},
779+
}
780+
}
776781
if len(ws.SheetViews.SheetView) > 0 {
777782
tabSelected = ws.SheetViews.SheetView[0].TabSelected
778783
}

sheet_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,18 @@ func TestSetSheetVisible(t *testing.T) {
570570
f.WorkBook = nil
571571
f.Pkg.Store(defaultXMLPathWorkbook, MacintoshCyrillicCharset)
572572
assert.EqualError(t, f.SetSheetVisible("Sheet1", false), "XML syntax error on line 1: invalid UTF-8")
573+
574+
// Test set sheet visible with empty sheet views
575+
f = NewFile()
576+
_, err := f.NewSheet("Sheet2")
577+
assert.NoError(t, err)
578+
ws, ok := f.Sheet.Load("xl/worksheets/sheet2.xml")
579+
assert.True(t, ok)
580+
ws.(*xlsxWorksheet).SheetViews = nil
581+
assert.NoError(t, f.SetSheetVisible("Sheet2", false))
582+
visible, err := f.GetSheetVisible("Sheet2")
583+
assert.NoError(t, err)
584+
assert.False(t, visible)
573585
}
574586

575587
func TestGetSheetVisible(t *testing.T) {

0 commit comments

Comments
 (0)