diff options
Diffstat (limited to 'excelize_test.go')
-rw-r--r-- | excelize_test.go | 347 |
1 files changed, 191 insertions, 156 deletions
diff --git a/excelize_test.go b/excelize_test.go index 47b9561..694f505 100644 --- a/excelize_test.go +++ b/excelize_test.go @@ -35,13 +35,22 @@ func TestOpenFile(t *testing.T) { t.Log("\r\n") } xlsx.UpdateLinkedValue() + xlsx.SetCellDefault("Sheet2", "A1", strconv.FormatFloat(float64(100.1588), 'f', -1, 32)) xlsx.SetCellDefault("Sheet2", "A1", strconv.FormatFloat(float64(-100.1588), 'f', -1, 64)) + // Test set cell value with illegal row number. - xlsx.SetCellDefault("Sheet2", "A", strconv.FormatFloat(float64(-100.1588), 'f', -1, 64)) + assert.Panics(t, func() { + xlsx.SetCellDefault("Sheet2", "A", strconv.FormatFloat(float64(-100.1588), 'f', -1, 64)) + }) + xlsx.SetCellInt("Sheet2", "A1", 100) + // Test set cell integer value with illegal row number. - xlsx.SetCellInt("Sheet2", "A", 100) + assert.Panics(t, func() { + xlsx.SetCellInt("Sheet2", "A", 100) + }) + xlsx.SetCellStr("Sheet2", "C11", "Knowns") // Test max characters in a cell. xlsx.SetCellStr("Sheet2", "D11", strings.Repeat("c", 32769)) @@ -51,23 +60,38 @@ func TestOpenFile(t *testing.T) { xlsx.SetCellInt("Sheet3", "A23", 10) xlsx.SetCellStr("Sheet3", "b230", "10") xlsx.SetCellStr("Sheet10", "b230", "10") + // Test set cell string value with illegal row number. - xlsx.SetCellStr("Sheet10", "A", "10") + assert.Panics(t, func() { + xlsx.SetCellStr("Sheet10", "A", "10") + }) + xlsx.SetActiveSheet(2) // Test get cell formula with given rows number. xlsx.GetCellFormula("Sheet1", "B19") // Test get cell formula with illegal worksheet name. xlsx.GetCellFormula("Sheet2", "B20") - // Test get cell formula with illegal rows number. xlsx.GetCellFormula("Sheet1", "B20") - xlsx.GetCellFormula("Sheet1", "B") + + // Test get cell formula with illegal rows number. + assert.Panics(t, func() { + xlsx.GetCellFormula("Sheet1", "B") + }) + // Test get shared cell formula xlsx.GetCellFormula("Sheet2", "H11") xlsx.GetCellFormula("Sheet2", "I11") getSharedForumula(&xlsxWorksheet{}, "") + // Test read cell value with given illegal rows number. - xlsx.GetCellValue("Sheet2", "a-1") - xlsx.GetCellValue("Sheet2", "A") + assert.Panics(t, func() { + xlsx.GetCellValue("Sheet2", "a-1") + }) + + assert.Panics(t, func() { + xlsx.GetCellValue("Sheet2", "A") + }) + // Test read cell value with given lowercase column number. xlsx.GetCellValue("Sheet2", "a5") xlsx.GetCellValue("Sheet2", "C11") @@ -92,10 +116,7 @@ func TestOpenFile(t *testing.T) { xlsx.SetCellValue("Sheet2", "F15", uint64(1<<32-1)) xlsx.SetCellValue("Sheet2", "F16", true) xlsx.SetCellValue("Sheet2", "F17", complex64(5+10i)) - t.Log(letterOnlyMapF('x')) - shiftJulianToNoon(1, -0.6) - timeFromExcelTime(61, true) - timeFromExcelTime(62, true) + // Test boolean write booltest := []struct { value bool @@ -108,8 +129,14 @@ func TestOpenFile(t *testing.T) { xlsx.SetCellValue("Sheet2", "F16", test.value) assert.Equal(t, test.expected, xlsx.GetCellValue("Sheet2", "F16")) } + xlsx.SetCellValue("Sheet2", "G2", nil) - xlsx.SetCellValue("Sheet2", "G4", time.Now()) + + assert.Panics(t, func() { + xlsx.SetCellValue("Sheet2", "G4", time.Now()) + }) + + xlsx.SetCellValue("Sheet2", "G4", time.Now().UTC()) // 02:46:40 xlsx.SetCellValue("Sheet2", "G5", time.Duration(1e13)) // Test completion column. @@ -298,8 +325,15 @@ func TestSetCellHyperLink(t *testing.T) { xlsx.SetCellHyperLink("Sheet2", "C1", "https://github.com/360EntSecGroup-Skylar/excelize", "External") // Test add Location hyperlink in a work sheet. xlsx.SetCellHyperLink("Sheet2", "D6", "Sheet1!D8", "Location") - xlsx.SetCellHyperLink("Sheet2", "C3", "Sheet1!D8", "") - xlsx.SetCellHyperLink("Sheet2", "", "Sheet1!D60", "Location") + + assert.Panics(t, func() { + xlsx.SetCellHyperLink("Sheet2", "C3", "Sheet1!D8", "") + }) + + assert.Panics(t, func() { + xlsx.SetCellHyperLink("Sheet2", "", "Sheet1!D60", "Location") + }) + assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSetCellHyperLink.xlsx"))) } @@ -309,9 +343,11 @@ func TestGetCellHyperLink(t *testing.T) { t.FailNow() } - link, target := xlsx.GetCellHyperLink("Sheet1", "") - t.Log(link, target) - link, target = xlsx.GetCellHyperLink("Sheet1", "A22") + assert.Panics(t, func() { + xlsx.GetCellHyperLink("Sheet1", "") + }) + + link, target := xlsx.GetCellHyperLink("Sheet1", "A22") t.Log(link, target) link, target = xlsx.GetCellHyperLink("Sheet2", "D6") t.Log(link, target) @@ -327,8 +363,12 @@ func TestSetCellFormula(t *testing.T) { xlsx.SetCellFormula("Sheet1", "B19", "SUM(Sheet2!D2,Sheet2!D11)") xlsx.SetCellFormula("Sheet1", "C19", "SUM(Sheet2!D2,Sheet2!D9)") + // Test set cell formula with illegal rows number. - xlsx.SetCellFormula("Sheet1", "C", "SUM(Sheet2!D2,Sheet2!D9)") + assert.Panics(t, func() { + xlsx.SetCellFormula("Sheet1", "C", "SUM(Sheet2!D2,Sheet2!D9)") + }) + assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSetCellFormula1.xlsx"))) xlsx, err = OpenFile(filepath.Join("test", "CalcChain.xlsx")) @@ -408,51 +448,39 @@ func TestGetMergeCells(t *testing.T) { value string start string end string - }{ - { - value: "A1", - start: "A1", - end: "B1", - }, - { - value: "A2", - start: "A2", - end: "A3", - }, - { - value: "A4", - start: "A4", - end: "B5", - }, - { - value: "A7", - start: "A7", - end: "C10", - }, - } + }{{ + value: "A1", + start: "A1", + end: "B1", + }, { + value: "A2", + start: "A2", + end: "A3", + }, { + value: "A4", + start: "A4", + end: "B5", + }, { + value: "A7", + start: "A7", + end: "C10", + }} xlsx, err := OpenFile(filepath.Join("test", "MergeCell.xlsx")) if !assert.NoError(t, err) { t.FailNow() } + sheet1 := xlsx.GetSheetName(1) - mergeCells := xlsx.GetMergeCells("Sheet1") - if len(mergeCells) != len(wants) { - t.Fatalf("Expected count of merge cells %d, but got %d\n", len(wants), len(mergeCells)) + mergeCells := xlsx.GetMergeCells(sheet1) + if !assert.Len(t, mergeCells, len(wants)) { + t.FailNow() } for i, m := range mergeCells { - if wants[i].value != m.GetCellValue() { - t.Fatalf("Expected merged cell value %s, but got %s\n", wants[i].value, m.GetCellValue()) - } - - if wants[i].start != m.GetStartAxis() { - t.Fatalf("Expected merged cell value %s, but got %s\n", wants[i].start, m.GetStartAxis()) - } - - if wants[i].end != m.GetEndAxis() { - t.Fatalf("Expected merged cell value %s, but got %s\n", wants[i].end, m.GetEndAxis()) - } + assert.Equal(t, wants[i].value, m.GetCellValue()) + assert.Equal(t, wants[i].start, m.GetStartAxis()) + assert.Equal(t, wants[i].end, m.GetEndAxis()) } } @@ -469,11 +497,20 @@ func TestSetCellStyleAlignment(t *testing.T) { } xlsx.SetCellStyle("Sheet1", "A22", "A22", style) + // Test set cell style with given illegal rows number. - xlsx.SetCellStyle("Sheet1", "A", "A22", style) - xlsx.SetCellStyle("Sheet1", "A22", "A", style) + assert.Panics(t, func() { + xlsx.SetCellStyle("Sheet1", "A", "A22", style) + }) + + assert.Panics(t, func() { + xlsx.SetCellStyle("Sheet1", "A22", "A", style) + }) + // Test get cell style with given illegal rows number. - xlsx.GetCellStyle("Sheet1", "A") + assert.Panics(t, func() { + xlsx.GetCellStyle("Sheet1", "A") + }) assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSetCellStyleAlignment.xlsx"))) } @@ -782,46 +819,48 @@ func TestGetPicture(t *testing.T) { } file, raw := xlsx.GetPicture("Sheet1", "F21") - if file == "" { - err = ioutil.WriteFile(file, raw, 0644) - if !assert.NoError(t, err) { - t.FailNow() - } + if !assert.NotEmpty(t, file) || !assert.NotEmpty(t, raw) || + !assert.NoError(t, ioutil.WriteFile(file, raw, 0644)) { + + t.FailNow() } // Try to get picture from a worksheet that doesn't contain any images. file, raw = xlsx.GetPicture("Sheet3", "I9") - if file != "" { - err = ioutil.WriteFile(file, raw, 0644) - if !assert.NoError(t, err) { - t.FailNow() - } - } + assert.Empty(t, file) + assert.Empty(t, raw) + // Try to get picture from a cell that doesn't contain an image. file, raw = xlsx.GetPicture("Sheet2", "A2") - t.Log(file, len(raw)) + assert.Empty(t, file) + assert.Empty(t, raw) + xlsx.getDrawingRelationships("xl/worksheets/_rels/sheet1.xml.rels", "rId8") xlsx.getDrawingRelationships("", "") xlsx.getSheetRelationshipsTargetByID("", "") xlsx.deleteSheetRelationships("", "") // Try to get picture from a local storage file. - assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestGetPicture.xlsx"))) + if !assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestGetPicture.xlsx"))) { + t.FailNow() + } + xlsx, err = OpenFile(filepath.Join("test", "TestGetPicture.xlsx")) if !assert.NoError(t, err) { t.FailNow() } + file, raw = xlsx.GetPicture("Sheet1", "F21") - if file == "" { - err = ioutil.WriteFile(file, raw, 0644) - if !assert.NoError(t, err) { - t.FailNow() - } + if !assert.NotEmpty(t, file) || !assert.NotEmpty(t, raw) || + !assert.NoError(t, ioutil.WriteFile(file, raw, 0644)) { + + t.FailNow() } // Try to get picture from a local storage file that doesn't contain an image. file, raw = xlsx.GetPicture("Sheet1", "F22") - t.Log(file, len(raw)) + assert.Empty(t, file) + assert.Empty(t, raw) } func TestSheetVisibility(t *testing.T) { @@ -838,21 +877,6 @@ func TestSheetVisibility(t *testing.T) { assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSheetVisibility.xlsx"))) } -func TestRowVisibility(t *testing.T) { - xlsx, err := prepareTestBook1() - if !assert.NoError(t, err) { - t.FailNow() - } - - xlsx.SetRowVisible("Sheet3", 2, false) - xlsx.SetRowVisible("Sheet3", 2, true) - xlsx.SetRowVisible("Sheet3", 0, true) - xlsx.GetRowVisible("Sheet3", 2) - xlsx.GetRowVisible("Sheet3", 0) - - assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestRowVisibility.xlsx"))) -} - func TestColumnVisibility(t *testing.T) { t.Run("TestBook1", func(t *testing.T) { xlsx, err := prepareTestBook1() @@ -1065,38 +1089,37 @@ func TestAddChart(t *testing.T) { func TestInsertCol(t *testing.T) { xlsx := NewFile() - for j := 1; j <= 10; j++ { - for i := 0; i <= 10; i++ { - axis := ToAlphaString(i) + strconv.Itoa(j) - xlsx.SetCellStr("Sheet1", axis, axis) - } - } - xlsx.SetCellHyperLink("Sheet1", "A5", "https://github.com/360EntSecGroup-Skylar/excelize", "External") - xlsx.MergeCell("Sheet1", "A1", "C3") - err := xlsx.AutoFilter("Sheet1", "A2", "B2", `{"column":"B","expression":"x != blanks"}`) + sheet1 := xlsx.GetSheetName(1) + + fillCells(xlsx, sheet1, 10, 10) + + xlsx.SetCellHyperLink(sheet1, "A5", "https://github.com/360EntSecGroup-Skylar/excelize", "External") + xlsx.MergeCell(sheet1, "A1", "C3") + + err := xlsx.AutoFilter(sheet1, "A2", "B2", `{"column":"B","expression":"x != blanks"}`) if !assert.NoError(t, err) { t.FailNow() } - xlsx.InsertCol("Sheet1", "A") + xlsx.InsertCol(sheet1, "A") assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestInsertCol.xlsx"))) } func TestRemoveCol(t *testing.T) { xlsx := NewFile() - for j := 1; j <= 10; j++ { - for i := 0; i <= 10; i++ { - axis := ToAlphaString(i) + strconv.Itoa(j) - xlsx.SetCellStr("Sheet1", axis, axis) - } - } - xlsx.SetCellHyperLink("Sheet1", "A5", "https://github.com/360EntSecGroup-Skylar/excelize", "External") - xlsx.SetCellHyperLink("Sheet1", "C5", "https://github.com", "External") - xlsx.MergeCell("Sheet1", "A1", "B1") - xlsx.MergeCell("Sheet1", "A2", "B2") - xlsx.RemoveCol("Sheet1", "A") - xlsx.RemoveCol("Sheet1", "A") + sheet1 := xlsx.GetSheetName(1) + + fillCells(xlsx, sheet1, 10, 15) + + xlsx.SetCellHyperLink(sheet1, "A5", "https://github.com/360EntSecGroup-Skylar/excelize", "External") + xlsx.SetCellHyperLink(sheet1, "C5", "https://github.com", "External") + + xlsx.MergeCell(sheet1, "A1", "B1") + xlsx.MergeCell(sheet1, "A2", "B2") + + xlsx.RemoveCol(sheet1, "A") + xlsx.RemoveCol(sheet1, "A") assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestRemoveCol.xlsx"))) } @@ -1117,11 +1140,10 @@ func TestSetPane(t *testing.T) { func TestConditionalFormat(t *testing.T) { xlsx := NewFile() - for j := 1; j <= 10; j++ { - for i := 0; i <= 15; i++ { - xlsx.SetCellInt("Sheet1", ToAlphaString(i)+strconv.Itoa(j), j) - } - } + sheet1 := xlsx.GetSheetName(1) + + fillCells(xlsx, sheet1, 10, 15) + var format1, format2, format3 int var err error // Rose format for bad conditional. @@ -1143,31 +1165,31 @@ func TestConditionalFormat(t *testing.T) { } // Color scales: 2 color. - xlsx.SetConditionalFormat("Sheet1", "A1:A10", `[{"type":"2_color_scale","criteria":"=","min_type":"min","max_type":"max","min_color":"#F8696B","max_color":"#63BE7B"}]`) + xlsx.SetConditionalFormat(sheet1, "A1:A10", `[{"type":"2_color_scale","criteria":"=","min_type":"min","max_type":"max","min_color":"#F8696B","max_color":"#63BE7B"}]`) // Color scales: 3 color. - xlsx.SetConditionalFormat("Sheet1", "B1:B10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`) + xlsx.SetConditionalFormat(sheet1, "B1:B10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`) // Hightlight cells rules: between... - xlsx.SetConditionalFormat("Sheet1", "C1:C10", fmt.Sprintf(`[{"type":"cell","criteria":"between","format":%d,"minimum":"6","maximum":"8"}]`, format1)) + xlsx.SetConditionalFormat(sheet1, "C1:C10", fmt.Sprintf(`[{"type":"cell","criteria":"between","format":%d,"minimum":"6","maximum":"8"}]`, format1)) // Hightlight cells rules: Greater Than... - xlsx.SetConditionalFormat("Sheet1", "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format3)) + xlsx.SetConditionalFormat(sheet1, "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format3)) // Hightlight cells rules: Equal To... - xlsx.SetConditionalFormat("Sheet1", "E1:E10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d}]`, format3)) + xlsx.SetConditionalFormat(sheet1, "E1:E10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d}]`, format3)) // Hightlight cells rules: Not Equal To... - xlsx.SetConditionalFormat("Sheet1", "F1:F10", fmt.Sprintf(`[{"type":"unique","criteria":"=","format":%d}]`, format2)) + xlsx.SetConditionalFormat(sheet1, "F1:F10", fmt.Sprintf(`[{"type":"unique","criteria":"=","format":%d}]`, format2)) // Hightlight cells rules: Duplicate Values... - xlsx.SetConditionalFormat("Sheet1", "G1:G10", fmt.Sprintf(`[{"type":"duplicate","criteria":"=","format":%d}]`, format2)) + xlsx.SetConditionalFormat(sheet1, "G1:G10", fmt.Sprintf(`[{"type":"duplicate","criteria":"=","format":%d}]`, format2)) // Top/Bottom rules: Top 10%. - xlsx.SetConditionalFormat("Sheet1", "H1:H10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6","percent":true}]`, format1)) + xlsx.SetConditionalFormat(sheet1, "H1:H10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6","percent":true}]`, format1)) // Top/Bottom rules: Above Average... - xlsx.SetConditionalFormat("Sheet1", "I1:I10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": true}]`, format3)) + xlsx.SetConditionalFormat(sheet1, "I1:I10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": true}]`, format3)) // Top/Bottom rules: Below Average... - xlsx.SetConditionalFormat("Sheet1", "J1:J10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": false}]`, format1)) + xlsx.SetConditionalFormat(sheet1, "J1:J10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": false}]`, format1)) // Data Bars: Gradient Fill. - xlsx.SetConditionalFormat("Sheet1", "K1:K10", `[{"type":"data_bar", "criteria":"=", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`) + xlsx.SetConditionalFormat(sheet1, "K1:K10", `[{"type":"data_bar", "criteria":"=", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`) // Use a formula to determine which cells to format. - xlsx.SetConditionalFormat("Sheet1", "L1:L10", fmt.Sprintf(`[{"type":"formula", "criteria":"L2<3", "format":%d}]`, format1)) + xlsx.SetConditionalFormat(sheet1, "L1:L10", fmt.Sprintf(`[{"type":"formula", "criteria":"L2<3", "format":%d}]`, format1)) // Test set invalid format set in conditional format - xlsx.SetConditionalFormat("Sheet1", "L1:L10", "") + xlsx.SetConditionalFormat(sheet1, "L1:L10", "") err = xlsx.SaveAs(filepath.Join("test", "TestConditionalFormat.xlsx")) if !assert.NoError(t, err) { @@ -1175,9 +1197,9 @@ func TestConditionalFormat(t *testing.T) { } // Set conditional format with illegal valid type. - xlsx.SetConditionalFormat("Sheet1", "K1:K10", `[{"type":"", "criteria":"=", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`) + xlsx.SetConditionalFormat(sheet1, "K1:K10", `[{"type":"", "criteria":"=", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`) // Set conditional format with illegal criteria type. - xlsx.SetConditionalFormat("Sheet1", "K1:K10", `[{"type":"data_bar", "criteria":"", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`) + xlsx.SetConditionalFormat(sheet1, "K1:K10", `[{"type":"data_bar", "criteria":"", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`) // Set conditional format with file without dxfs element shold not return error. xlsx, err = OpenFile(filepath.Join("test", "Book1.xlsx")) @@ -1193,11 +1215,9 @@ func TestConditionalFormat(t *testing.T) { func TestConditionalFormatError(t *testing.T) { xlsx := NewFile() - for j := 1; j <= 10; j++ { - for i := 0; i <= 15; i++ { - xlsx.SetCellInt("Sheet1", ToAlphaString(i)+strconv.Itoa(j), j) - } - } + sheet1 := xlsx.GetSheetName(1) + + fillCells(xlsx, sheet1, 10, 15) // Set conditional format with illegal JSON string should return error _, err := xlsx.NewConditionalStyle("") @@ -1206,15 +1226,6 @@ func TestConditionalFormatError(t *testing.T) { } } -func TestTitleToNumber(t *testing.T) { - assert.Equal(t, 0, TitleToNumber("A")) - assert.Equal(t, 25, TitleToNumber("Z")) - assert.Equal(t, 26, TitleToNumber("AA")) - assert.Equal(t, 36, TitleToNumber("AK")) - assert.Equal(t, 36, TitleToNumber("ak")) - assert.Equal(t, 51, TitleToNumber("AZ")) -} - func TestSharedStrings(t *testing.T) { xlsx, err := OpenFile(filepath.Join("test", "SharedStrings.xlsx")) if !assert.NoError(t, err) { @@ -1229,10 +1240,19 @@ func TestSetSheetRow(t *testing.T) { t.FailNow() } - xlsx.SetSheetRow("Sheet1", "B27", &[]interface{}{"cell", nil, int32(42), float64(42), time.Now()}) - xlsx.SetSheetRow("Sheet1", "", &[]interface{}{"cell", nil, 2}) - xlsx.SetSheetRow("Sheet1", "B27", []interface{}{}) - xlsx.SetSheetRow("Sheet1", "B27", &xlsx) + xlsx.SetSheetRow("Sheet1", "B27", &[]interface{}{"cell", nil, int32(42), float64(42), time.Now().UTC()}) + + assert.Panics(t, func() { + xlsx.SetSheetRow("Sheet1", "", &[]interface{}{"cell", nil, 2}) + }) + + assert.Panics(t, func() { + xlsx.SetSheetRow("Sheet1", "B27", []interface{}{}) + }) + + assert.Panics(t, func() { + xlsx.SetSheetRow("Sheet1", "B27", &xlsx) + }) assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSetSheetRow.xlsx"))) } @@ -1245,10 +1265,17 @@ func TestOutlineLevel(t *testing.T) { xlsx.GetColOutlineLevel("Shee2", "A") xlsx.SetColWidth("Sheet2", "A", "D", 13) xlsx.SetColOutlineLevel("Sheet2", "B", 2) - xlsx.SetRowOutlineLevel("Sheet1", 2, 1) - xlsx.SetRowOutlineLevel("Sheet1", 0, 1) - xlsx.GetRowOutlineLevel("Sheet1", 2) - xlsx.GetRowOutlineLevel("Sheet1", 0) + xlsx.SetRowOutlineLevel("Sheet1", 2, 250) + + assert.Panics(t, func() { + xlsx.SetRowOutlineLevel("Sheet1", 0, 1) + }) + + assert.Equal(t, uint8(250), xlsx.GetRowOutlineLevel("Sheet1", 2)) + + assert.Panics(t, func() { + xlsx.GetRowOutlineLevel("Sheet1", 0) + }) err := xlsx.SaveAs(filepath.Join("test", "TestOutlineLevel.xlsx")) if !assert.NoError(t, err) { t.FailNow() @@ -1258,7 +1285,6 @@ func TestOutlineLevel(t *testing.T) { if !assert.NoError(t, err) { t.FailNow() } - xlsx.SetColOutlineLevel("Sheet2", "B", 2) } @@ -1388,3 +1414,12 @@ func prepareTestBook4() (*File, error) { return xlsx, nil } + +func fillCells(xlsx *File, sheet string, colCount, rowCount int) { + for col := 1; col <= colCount; col++ { + for row := 1; row <= rowCount; row++ { + cell := MustCoordinatesToCellName(col, row) + xlsx.SetCellStr(sheet, cell, cell) + } + } +} |