123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- package excelize
- import (
- "path/filepath"
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
- func TestCols(t *testing.T) {
- const sheet2 = "Sheet2"
- f, err := OpenFile(filepath.Join("test", "Book1.xlsx"))
- if !assert.NoError(t, err) {
- t.FailNow()
- }
- cols, err := f.Cols(sheet2)
- if !assert.NoError(t, err) {
- t.FailNow()
- }
- var collectedRows [][]string
- for cols.Next() {
- rows, err := cols.Rows()
- assert.NoError(t, err)
- collectedRows = append(collectedRows, trimSliceSpace(rows))
- }
- if !assert.NoError(t, cols.Error()) {
- t.FailNow()
- }
- returnedColumns, err := f.GetCols(sheet2)
- assert.NoError(t, err)
- for i := range returnedColumns {
- returnedColumns[i] = trimSliceSpace(returnedColumns[i])
- }
- if !assert.Equal(t, collectedRows, returnedColumns) {
- t.FailNow()
- }
- f = NewFile()
- cells := []string{"C2", "C3", "C4"}
- for _, cell := range cells {
- assert.NoError(t, f.SetCellValue("Sheet1", cell, 1))
- }
- _, err = f.Rows("Sheet1")
- assert.NoError(t, err)
- f.Sheet["xl/worksheets/sheet1.xml"] = &xlsxWorksheet{
- Dimension: &xlsxDimension{
- Ref: "C2:C4",
- },
- }
- _, err = f.Rows("Sheet1")
- assert.NoError(t, err)
- }
- func TestColumnsIterator(t *testing.T) {
- const (
- sheet2 = "Sheet2"
- expectedNumCol = 9
- )
- f, err := OpenFile(filepath.Join("test", "Book1.xlsx"))
- require.NoError(t, err)
- cols, err := f.Cols(sheet2)
- require.NoError(t, err)
- var colCount int
- for cols.Next() {
- colCount++
- require.True(t, colCount <= expectedNumCol, "colCount is greater than expected")
- }
- assert.Equal(t, expectedNumCol, colCount)
- f = NewFile()
- cells := []string{"C2", "C3", "C4", "D2", "D3", "D4"}
- for _, cell := range cells {
- assert.NoError(t, f.SetCellValue("Sheet1", cell, 1))
- }
- cols, err = f.Cols("Sheet1")
- require.NoError(t, err)
- colCount = 0
- for cols.Next() {
- colCount++
- require.True(t, colCount <= 4, "colCount is greater than expected")
- }
- assert.Equal(t, 4, colCount)
- }
- func TestColsError(t *testing.T) {
- f, err := OpenFile(filepath.Join("test", "Book1.xlsx"))
- if !assert.NoError(t, err) {
- t.FailNow()
- }
- _, err = f.Cols("SheetN")
- assert.EqualError(t, err, "sheet SheetN is not exist")
- }
- func TestGetColsError(t *testing.T) {
- f, err := OpenFile(filepath.Join("test", "Book1.xlsx"))
- if !assert.NoError(t, err) {
- t.FailNow()
- }
- _, err = f.GetCols("SheetN")
- assert.EqualError(t, err, "sheet SheetN is not exist")
- f = NewFile()
- delete(f.Sheet, "xl/worksheets/sheet1.xml")
- f.XLSX["xl/worksheets/sheet1.xml"] = []byte(`<worksheet><sheetData><row r="A"><c r="2" t="str"><v>B</v></c></row></sheetData></worksheet>`)
- f.checked = nil
- _, err = f.GetCols("Sheet1")
- assert.EqualError(t, err, `strconv.Atoi: parsing "A": invalid syntax`)
- f = NewFile()
- delete(f.Sheet, "xl/worksheets/sheet1.xml")
- f.XLSX["xl/worksheets/sheet1.xml"] = []byte(`<worksheet><sheetData><row r="2"><c r="A" t="str"><v>B</v></c></row></sheetData></worksheet>`)
- f.checked = nil
- _, err = f.GetCols("Sheet1")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- f = NewFile()
- cols, err := f.Cols("Sheet1")
- assert.NoError(t, err)
- cols.totalRow = 2
- cols.totalCol = 2
- cols.curCol = 1
- cols.sheetXML = []byte(`<worksheet><sheetData><row r="1"><c r="A" t="str"><v>A</v></c></row></sheetData></worksheet>`)
- _, err = cols.Rows()
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- }
- func TestColsRows(t *testing.T) {
- f := NewFile()
- f.NewSheet("Sheet1")
- _, err := f.Cols("Sheet1")
- assert.NoError(t, err)
- assert.NoError(t, f.SetCellValue("Sheet1", "A1", 1))
- f.Sheet["xl/worksheets/sheet1.xml"] = &xlsxWorksheet{
- Dimension: &xlsxDimension{
- Ref: "A1:A1",
- },
- }
- f = NewFile()
- f.XLSX["xl/worksheets/sheet1.xml"] = nil
- _, err = f.Cols("Sheet1")
- if !assert.NoError(t, err) {
- t.FailNow()
- }
- f = NewFile()
- cols, err := f.Cols("Sheet1")
- if !assert.NoError(t, err) {
- t.FailNow()
- }
- _, err = cols.Rows()
- assert.NoError(t, err)
- cols.stashCol, cols.curCol = 0, 1
- // Test if token is nil
- cols.sheetXML = nil
- _, err = cols.Rows()
- assert.NoError(t, err)
- }
- func TestColumnVisibility(t *testing.T) {
- t.Run("TestBook1", func(t *testing.T) {
- f, err := prepareTestBook1()
- assert.NoError(t, err)
- // Hide/display a column with SetColVisible
- assert.NoError(t, f.SetColVisible("Sheet1", "F", false))
- assert.NoError(t, f.SetColVisible("Sheet1", "F", true))
- visible, err := f.GetColVisible("Sheet1", "F")
- assert.Equal(t, true, visible)
- assert.NoError(t, err)
- // Test hiding a few columns SetColVisible(...false)...
- assert.NoError(t, f.SetColVisible("Sheet1", "F:V", false))
- visible, err = f.GetColVisible("Sheet1", "F")
- assert.Equal(t, false, visible)
- assert.NoError(t, err)
- visible, err = f.GetColVisible("Sheet1", "U")
- assert.Equal(t, false, visible)
- assert.NoError(t, err)
- visible, err = f.GetColVisible("Sheet1", "V")
- assert.Equal(t, false, visible)
- assert.NoError(t, err)
- // ...and displaying them back SetColVisible(...true)
- assert.NoError(t, f.SetColVisible("Sheet1", "V:F", true))
- visible, err = f.GetColVisible("Sheet1", "F")
- assert.Equal(t, true, visible)
- assert.NoError(t, err)
- visible, err = f.GetColVisible("Sheet1", "U")
- assert.Equal(t, true, visible)
- assert.NoError(t, err)
- visible, err = f.GetColVisible("Sheet1", "G")
- assert.Equal(t, true, visible)
- assert.NoError(t, err)
- // Test get column visible on an inexistent worksheet.
- _, err = f.GetColVisible("SheetN", "F")
- assert.EqualError(t, err, "sheet SheetN is not exist")
- // Test get column visible with illegal cell coordinates.
- _, err = f.GetColVisible("Sheet1", "*")
- assert.EqualError(t, err, `invalid column name "*"`)
- assert.EqualError(t, f.SetColVisible("Sheet1", "*", false), `invalid column name "*"`)
- f.NewSheet("Sheet3")
- assert.NoError(t, f.SetColVisible("Sheet3", "E", false))
- assert.EqualError(t, f.SetColVisible("Sheet1", "A:-1", true), "invalid column name \"-1\"")
- assert.EqualError(t, f.SetColVisible("SheetN", "E", false), "sheet SheetN is not exist")
- assert.NoError(t, f.SaveAs(filepath.Join("test", "TestColumnVisibility.xlsx")))
- })
- t.Run("TestBook3", func(t *testing.T) {
- f, err := prepareTestBook3()
- assert.NoError(t, err)
- visible, err := f.GetColVisible("Sheet1", "B")
- assert.Equal(t, true, visible)
- assert.NoError(t, err)
- })
- }
- func TestOutlineLevel(t *testing.T) {
- f := NewFile()
- level, err := f.GetColOutlineLevel("Sheet1", "D")
- assert.Equal(t, uint8(0), level)
- assert.NoError(t, err)
- f.NewSheet("Sheet2")
- assert.NoError(t, f.SetColOutlineLevel("Sheet1", "D", 4))
- level, err = f.GetColOutlineLevel("Sheet1", "D")
- assert.Equal(t, uint8(4), level)
- assert.NoError(t, err)
- level, err = f.GetColOutlineLevel("Shee2", "A")
- assert.Equal(t, uint8(0), level)
- assert.EqualError(t, err, "sheet Shee2 is not exist")
- assert.NoError(t, f.SetColWidth("Sheet2", "A", "D", 13))
- assert.EqualError(t, f.SetColWidth("Sheet2", "A", "D", MaxColumnWidth+1), "the width of the column must be smaller than or equal to 255 characters")
- assert.NoError(t, f.SetColOutlineLevel("Sheet2", "B", 2))
- assert.NoError(t, f.SetRowOutlineLevel("Sheet1", 2, 7))
- assert.EqualError(t, f.SetColOutlineLevel("Sheet1", "D", 8), "invalid outline level")
- assert.EqualError(t, f.SetRowOutlineLevel("Sheet1", 2, 8), "invalid outline level")
- // Test set row outline level on not exists worksheet.
- assert.EqualError(t, f.SetRowOutlineLevel("SheetN", 1, 4), "sheet SheetN is not exist")
- // Test get row outline level on not exists worksheet.
- _, err = f.GetRowOutlineLevel("SheetN", 1)
- assert.EqualError(t, err, "sheet SheetN is not exist")
- // Test set and get column outline level with illegal cell coordinates.
- assert.EqualError(t, f.SetColOutlineLevel("Sheet1", "*", 1), `invalid column name "*"`)
- _, err = f.GetColOutlineLevel("Sheet1", "*")
- assert.EqualError(t, err, `invalid column name "*"`)
- // Test set column outline level on not exists worksheet.
- assert.EqualError(t, f.SetColOutlineLevel("SheetN", "E", 2), "sheet SheetN is not exist")
- assert.EqualError(t, f.SetRowOutlineLevel("Sheet1", 0, 1), "invalid row number 0")
- level, err = f.GetRowOutlineLevel("Sheet1", 2)
- assert.NoError(t, err)
- assert.Equal(t, uint8(7), level)
- _, err = f.GetRowOutlineLevel("Sheet1", 0)
- assert.EqualError(t, err, `invalid row number 0`)
- level, err = f.GetRowOutlineLevel("Sheet1", 10)
- assert.NoError(t, err)
- assert.Equal(t, uint8(0), level)
- assert.NoError(t, f.SaveAs(filepath.Join("test", "TestOutlineLevel.xlsx")))
- f, err = OpenFile(filepath.Join("test", "Book1.xlsx"))
- assert.NoError(t, err)
- assert.NoError(t, f.SetColOutlineLevel("Sheet2", "B", 2))
- }
- func TestSetColStyle(t *testing.T) {
- f := NewFile()
- style, err := f.NewStyle(`{"fill":{"type":"pattern","color":["#94d3a2"],"pattern":1}}`)
- assert.NoError(t, err)
- // Test set column style on not exists worksheet.
- assert.EqualError(t, f.SetColStyle("SheetN", "E", style), "sheet SheetN is not exist")
- // Test set column style with illegal cell coordinates.
- assert.EqualError(t, f.SetColStyle("Sheet1", "*", style), `invalid column name "*"`)
- assert.EqualError(t, f.SetColStyle("Sheet1", "A:*", style), `invalid column name "*"`)
- assert.NoError(t, f.SetColStyle("Sheet1", "B", style))
- // Test set column style with already exists column with style.
- assert.NoError(t, f.SetColStyle("Sheet1", "B", style))
- assert.NoError(t, f.SetColStyle("Sheet1", "D:C", style))
- assert.NoError(t, f.SaveAs(filepath.Join("test", "TestSetColStyle.xlsx")))
- }
- func TestColWidth(t *testing.T) {
- f := NewFile()
- assert.NoError(t, f.SetColWidth("Sheet1", "B", "A", 12))
- assert.NoError(t, f.SetColWidth("Sheet1", "A", "B", 12))
- width, err := f.GetColWidth("Sheet1", "A")
- assert.Equal(t, float64(12), width)
- assert.NoError(t, err)
- width, err = f.GetColWidth("Sheet1", "C")
- assert.Equal(t, defaultColWidth, width)
- assert.NoError(t, err)
- // Test set and get column width with illegal cell coordinates.
- width, err = f.GetColWidth("Sheet1", "*")
- assert.Equal(t, defaultColWidth, width)
- assert.EqualError(t, err, `invalid column name "*"`)
- assert.EqualError(t, f.SetColWidth("Sheet1", "*", "B", 1), `invalid column name "*"`)
- assert.EqualError(t, f.SetColWidth("Sheet1", "A", "*", 1), `invalid column name "*"`)
- // Test set column width on not exists worksheet.
- assert.EqualError(t, f.SetColWidth("SheetN", "B", "A", 12), "sheet SheetN is not exist")
- // Test get column width on not exists worksheet.
- _, err = f.GetColWidth("SheetN", "A")
- assert.EqualError(t, err, "sheet SheetN is not exist")
- assert.NoError(t, f.SaveAs(filepath.Join("test", "TestColWidth.xlsx")))
- convertRowHeightToPixels(0)
- }
- func TestInsertCol(t *testing.T) {
- f := NewFile()
- sheet1 := f.GetSheetName(0)
- fillCells(f, sheet1, 10, 10)
- assert.NoError(t, f.SetCellHyperLink(sheet1, "A5", "https://github.com/360EntSecGroup-Skylar/excelize", "External"))
- assert.NoError(t, f.MergeCell(sheet1, "A1", "C3"))
- assert.NoError(t, f.AutoFilter(sheet1, "A2", "B2", `{"column":"B","expression":"x != blanks"}`))
- assert.NoError(t, f.InsertCol(sheet1, "A"))
- // Test insert column with illegal cell coordinates.
- assert.EqualError(t, f.InsertCol("Sheet1", "*"), `invalid column name "*"`)
- assert.NoError(t, f.SaveAs(filepath.Join("test", "TestInsertCol.xlsx")))
- }
- func TestRemoveCol(t *testing.T) {
- f := NewFile()
- sheet1 := f.GetSheetName(0)
- fillCells(f, sheet1, 10, 15)
- assert.NoError(t, f.SetCellHyperLink(sheet1, "A5", "https://github.com/360EntSecGroup-Skylar/excelize", "External"))
- assert.NoError(t, f.SetCellHyperLink(sheet1, "C5", "https://github.com", "External"))
- assert.NoError(t, f.MergeCell(sheet1, "A1", "B1"))
- assert.NoError(t, f.MergeCell(sheet1, "A2", "B2"))
- assert.NoError(t, f.RemoveCol(sheet1, "A"))
- assert.NoError(t, f.RemoveCol(sheet1, "A"))
- // Test remove column with illegal cell coordinates.
- assert.EqualError(t, f.RemoveCol("Sheet1", "*"), `invalid column name "*"`)
- // Test remove column on not exists worksheet.
- assert.EqualError(t, f.RemoveCol("SheetN", "B"), "sheet SheetN is not exist")
- assert.NoError(t, f.SaveAs(filepath.Join("test", "TestRemoveCol.xlsx")))
- }
- func TestConvertColWidthToPixels(t *testing.T) {
- assert.Equal(t, -11.0, convertColWidthToPixels(-1))
- }
|