diff --git a/adjust_test.go b/adjust_test.go
index 3509b5d5..7a482f71 100644
--- a/adjust_test.go
+++ b/adjust_test.go
@@ -17,7 +17,7 @@ func TestAdjustMergeCells(t *testing.T) {
},
},
},
- }, rows, 0, 0), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ }, rows, 0, 0), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.EqualError(t, f.adjustMergeCells(&xlsxWorksheet{
MergeCells: &xlsxMergeCells{
Cells: []*xlsxMergeCell{
@@ -26,7 +26,7 @@ func TestAdjustMergeCells(t *testing.T) {
},
},
},
- }, rows, 0, 0), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+ }, rows, 0, 0), newCellNameToCoordinatesError("B", newInvalidCellNameError("B")).Error())
assert.NoError(t, f.adjustMergeCells(&xlsxWorksheet{
MergeCells: &xlsxMergeCells{
Cells: []*xlsxMergeCell{
@@ -265,12 +265,12 @@ func TestAdjustAutoFilter(t *testing.T) {
AutoFilter: &xlsxAutoFilter{
Ref: "A:B1",
},
- }, rows, 0, 0), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ }, rows, 0, 0), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.EqualError(t, f.adjustAutoFilter(&xlsxWorksheet{
AutoFilter: &xlsxAutoFilter{
Ref: "A1:B",
},
- }, rows, 0, 0), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+ }, rows, 0, 0), newCellNameToCoordinatesError("B", newInvalidCellNameError("B")).Error())
}
func TestAdjustHelper(t *testing.T) {
@@ -281,8 +281,8 @@ func TestAdjustHelper(t *testing.T) {
f.Sheet.Store("xl/worksheets/sheet2.xml", &xlsxWorksheet{
AutoFilter: &xlsxAutoFilter{Ref: "A1:B"}})
// testing adjustHelper with illegal cell coordinates.
- assert.EqualError(t, f.adjustHelper("Sheet1", rows, 0, 0), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- assert.EqualError(t, f.adjustHelper("Sheet2", rows, 0, 0), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+ assert.EqualError(t, f.adjustHelper("Sheet1", rows, 0, 0), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
+ assert.EqualError(t, f.adjustHelper("Sheet2", rows, 0, 0), newCellNameToCoordinatesError("B", newInvalidCellNameError("B")).Error())
// testing adjustHelper on not exists worksheet.
assert.EqualError(t, f.adjustHelper("SheetN", rows, 0, 0), "sheet SheetN is not exist")
}
@@ -298,7 +298,7 @@ func TestAdjustCalcChain(t *testing.T) {
assert.NoError(t, f.InsertRow("Sheet1", 1))
f.CalcChain.C[1].R = "invalid coordinates"
- assert.EqualError(t, f.InsertCol("Sheet1", "A"), `cannot convert cell "invalid coordinates" to coordinates: invalid cell name "invalid coordinates"`)
+ assert.EqualError(t, f.InsertCol("Sheet1", "A"), newCellNameToCoordinatesError("invalid coordinates", newInvalidCellNameError("invalid coordinates")).Error())
f.CalcChain = nil
assert.NoError(t, f.InsertCol("Sheet1", "A"))
}
diff --git a/calc_test.go b/calc_test.go
index 4c4839a9..b1d4f26d 100644
--- a/calc_test.go
+++ b/calc_test.go
@@ -1857,7 +1857,7 @@ func TestCalcCellValue(t *testing.T) {
// ABS
"=ABS()": "ABS requires 1 numeric argument",
`=ABS("X")`: "strconv.ParseFloat: parsing \"X\": invalid syntax",
- "=ABS(~)": `invalid column name "~"`,
+ "=ABS(~)": newInvalidColumnNameError("~").Error(),
// ACOS
"=ACOS()": "ACOS requires 1 numeric argument",
`=ACOS("X")`: "strconv.ParseFloat: parsing \"X\": invalid syntax",
@@ -2699,15 +2699,15 @@ func TestCalcCellValue(t *testing.T) {
// COLUMN
"=COLUMN(1,2)": "COLUMN requires at most 1 argument",
"=COLUMN(\"\")": "invalid reference",
- "=COLUMN(Sheet1)": "invalid column name \"Sheet1\"",
- "=COLUMN(Sheet1!A1!B1)": "invalid column name \"Sheet1\"",
+ "=COLUMN(Sheet1)": newInvalidColumnNameError("Sheet1").Error(),
+ "=COLUMN(Sheet1!A1!B1)": newInvalidColumnNameError("Sheet1").Error(),
// COLUMNS
"=COLUMNS()": "COLUMNS requires 1 argument",
"=COLUMNS(1)": "invalid reference",
"=COLUMNS(\"\")": "invalid reference",
- "=COLUMNS(Sheet1)": "invalid column name \"Sheet1\"",
- "=COLUMNS(Sheet1!A1!B1)": "invalid column name \"Sheet1\"",
- "=COLUMNS(Sheet1!Sheet1)": "invalid column name \"Sheet1\"",
+ "=COLUMNS(Sheet1)": newInvalidColumnNameError("Sheet1").Error(),
+ "=COLUMNS(Sheet1!A1!B1)": newInvalidColumnNameError("Sheet1").Error(),
+ "=COLUMNS(Sheet1!Sheet1)": newInvalidColumnNameError("Sheet1").Error(),
// HLOOKUP
"=HLOOKUP()": "HLOOKUP requires at least 3 arguments",
"=HLOOKUP(D2,D1,1,FALSE)": "HLOOKUP requires second argument of table array",
@@ -2751,15 +2751,15 @@ func TestCalcCellValue(t *testing.T) {
// ROW
"=ROW(1,2)": "ROW requires at most 1 argument",
"=ROW(\"\")": "invalid reference",
- "=ROW(Sheet1)": "invalid column name \"Sheet1\"",
- "=ROW(Sheet1!A1!B1)": "invalid column name \"Sheet1\"",
+ "=ROW(Sheet1)": newInvalidColumnNameError("Sheet1").Error(),
+ "=ROW(Sheet1!A1!B1)": newInvalidColumnNameError("Sheet1").Error(),
// ROWS
"=ROWS()": "ROWS requires 1 argument",
"=ROWS(1)": "invalid reference",
"=ROWS(\"\")": "invalid reference",
- "=ROWS(Sheet1)": "invalid column name \"Sheet1\"",
- "=ROWS(Sheet1!A1!B1)": "invalid column name \"Sheet1\"",
- "=ROWS(Sheet1!Sheet1)": "invalid column name \"Sheet1\"",
+ "=ROWS(Sheet1)": newInvalidColumnNameError("Sheet1").Error(),
+ "=ROWS(Sheet1!A1!B1)": newInvalidColumnNameError("Sheet1").Error(),
+ "=ROWS(Sheet1!Sheet1)": newInvalidColumnNameError("Sheet1").Error(),
// Web Functions
// ENCODEURL
"=ENCODEURL()": "ENCODEURL requires 1 argument",
diff --git a/cell_test.go b/cell_test.go
index e49212f6..4a78a067 100644
--- a/cell_test.go
+++ b/cell_test.go
@@ -108,11 +108,11 @@ func TestCheckCellInArea(t *testing.T) {
}
ok, err := f.checkCellInArea("A1", "A:B")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.False(t, ok)
ok, err = f.checkCellInArea("AA0", "Z0:AB1")
- assert.EqualError(t, err, `cannot convert cell "AA0" to coordinates: invalid cell name "AA0"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("AA0", newInvalidCellNameError("AA0")).Error())
assert.False(t, ok)
}
@@ -146,13 +146,13 @@ func TestSetCellFloat(t *testing.T) {
assert.Equal(t, "123.42", val, "A1 should be 123.42")
})
f := NewFile()
- assert.EqualError(t, f.SetCellFloat(sheet, "A", 123.42, -1, 64), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.SetCellFloat(sheet, "A", 123.42, -1, 64), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestSetCellValue(t *testing.T) {
f := NewFile()
- assert.EqualError(t, f.SetCellValue("Sheet1", "A", time.Now().UTC()), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- assert.EqualError(t, f.SetCellValue("Sheet1", "A", time.Duration(1e13)), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.SetCellValue("Sheet1", "A", time.Now().UTC()), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
+ assert.EqualError(t, f.SetCellValue("Sheet1", "A", time.Duration(1e13)), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestSetCellValues(t *testing.T) {
@@ -175,7 +175,7 @@ func TestSetCellValues(t *testing.T) {
func TestSetCellBool(t *testing.T) {
f := NewFile()
- assert.EqualError(t, f.SetCellBool("Sheet1", "A", true), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.SetCellBool("Sheet1", "A", true), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestSetCellTime(t *testing.T) {
@@ -336,7 +336,7 @@ func TestGetCellType(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, CellTypeString, cellType)
_, err = f.GetCellType("Sheet1", "A")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestGetCellFormula(t *testing.T) {
@@ -420,7 +420,7 @@ func TestSetCellFormula(t *testing.T) {
assert.NoError(t, f.SetCellFormula("Sheet1", "C19", "SUM(Sheet2!D2,Sheet2!D9)"))
// Test set cell formula with illegal rows number.
- assert.EqualError(t, f.SetCellFormula("Sheet1", "C", "SUM(Sheet2!D2,Sheet2!D9)"), `cannot convert cell "C" to coordinates: invalid cell name "C"`)
+ assert.EqualError(t, f.SetCellFormula("Sheet1", "C", "SUM(Sheet2!D2,Sheet2!D9)"), newCellNameToCoordinatesError("C", newInvalidCellNameError("C")).Error())
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestSetCellFormula1.xlsx")))
assert.NoError(t, f.Close())
@@ -523,7 +523,7 @@ func TestGetCellRichText(t *testing.T) {
assert.EqualError(t, err, "sheet SheetN is not exist")
// Test set cell rich text with illegal cell coordinates
_, err = f.GetCellRichText("Sheet1", "A")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestSetCellRichText(t *testing.T) {
f := NewFile()
@@ -603,7 +603,7 @@ func TestSetCellRichText(t *testing.T) {
// Test set cell rich text on not exists worksheet
assert.EqualError(t, f.SetCellRichText("SheetN", "A1", richTextRun), "sheet SheetN is not exist")
// Test set cell rich text with illegal cell coordinates
- assert.EqualError(t, f.SetCellRichText("Sheet1", "A", richTextRun), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.SetCellRichText("Sheet1", "A", richTextRun), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
richTextRun = []RichTextRun{{Text: strings.Repeat("s", TotalCellChars+1)}}
// Test set cell rich text with characters over the maximum limit
assert.EqualError(t, f.SetCellRichText("Sheet1", "A1", richTextRun), ErrCellCharsLength.Error())
diff --git a/chart_test.go b/chart_test.go
index 2cd71316..c99bfb2c 100644
--- a/chart_test.go
+++ b/chart_test.go
@@ -94,7 +94,7 @@ func TestChartSize(t *testing.T) {
func TestAddDrawingChart(t *testing.T) {
f := NewFile()
- assert.EqualError(t, f.addDrawingChart("SheetN", "", "", 0, 0, 0, nil), `cannot convert cell "" to coordinates: invalid cell name ""`)
+ assert.EqualError(t, f.addDrawingChart("SheetN", "", "", 0, 0, 0, nil), newCellNameToCoordinatesError("", newInvalidCellNameError("")).Error())
}
func TestAddChart(t *testing.T) {
@@ -199,7 +199,7 @@ func TestAddChart(t *testing.T) {
}
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddChart.xlsx")))
// Test with illegal cell coordinates
- assert.EqualError(t, f.AddChart("Sheet2", "A", `{"type":"col","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$30:$D$30"},{"name":"Sheet1!$A$31","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$31:$D$31"},{"name":"Sheet1!$A$32","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$32:$D$32"},{"name":"Sheet1!$A$33","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$33:$D$33"},{"name":"Sheet1!$A$34","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$34:$D$34"},{"name":"Sheet1!$A$35","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$35:$D$35"},{"name":"Sheet1!$A$36","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$36:$D$36"},{"name":"Sheet1!$A$37","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$37:$D$37"}],"format":{"x_scale":1.0,"y_scale":1.0,"x_offset":15,"y_offset":10,"print_obj":true,"lock_aspect_ratio":false,"locked":false},"legend":{"position":"left","show_legend_key":false},"title":{"name":"2D Column Chart"},"plotarea":{"show_bubble_size":true,"show_cat_name":false,"show_leader_lines":false,"show_percent":true,"show_series_name":true,"show_val":true},"show_blanks_as":"zero"}`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.AddChart("Sheet2", "A", `{"type":"col","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$30:$D$30"},{"name":"Sheet1!$A$31","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$31:$D$31"},{"name":"Sheet1!$A$32","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$32:$D$32"},{"name":"Sheet1!$A$33","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$33:$D$33"},{"name":"Sheet1!$A$34","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$34:$D$34"},{"name":"Sheet1!$A$35","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$35:$D$35"},{"name":"Sheet1!$A$36","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$36:$D$36"},{"name":"Sheet1!$A$37","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$37:$D$37"}],"format":{"x_scale":1.0,"y_scale":1.0,"x_offset":15,"y_offset":10,"print_obj":true,"lock_aspect_ratio":false,"locked":false},"legend":{"position":"left","show_legend_key":false},"title":{"name":"2D Column Chart"},"plotarea":{"show_bubble_size":true,"show_cat_name":false,"show_leader_lines":false,"show_percent":true,"show_series_name":true,"show_val":true},"show_blanks_as":"zero"}`), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
// Test with unsupported chart type
assert.EqualError(t, f.AddChart("Sheet2", "BD32", `{"type":"unknown","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$30:$D$30"},{"name":"Sheet1!$A$31","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$31:$D$31"},{"name":"Sheet1!$A$32","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$32:$D$32"},{"name":"Sheet1!$A$33","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$33:$D$33"},{"name":"Sheet1!$A$34","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$34:$D$34"},{"name":"Sheet1!$A$35","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$35:$D$35"},{"name":"Sheet1!$A$36","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$36:$D$36"},{"name":"Sheet1!$A$37","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$37:$D$37"}],"format":{"x_scale":1.0,"y_scale":1.0,"x_offset":15,"y_offset":10,"print_obj":true,"lock_aspect_ratio":false,"locked":false},"legend":{"position":"left","show_legend_key":false},"title":{"name":"Bubble 3D Chart"},"plotarea":{"show_bubble_size":true,"show_cat_name":false,"show_leader_lines":false,"show_percent":true,"show_series_name":true,"show_val":true},"show_blanks_as":"zero"}`), "unsupported chart type unknown")
// Test add combo chart with invalid format set
@@ -252,7 +252,7 @@ func TestDeleteChart(t *testing.T) {
// Test delete chart on not exists worksheet.
assert.EqualError(t, f.DeleteChart("SheetN", "A1"), "sheet SheetN is not exist")
// Test delete chart with invalid coordinates.
- assert.EqualError(t, f.DeleteChart("Sheet1", ""), `cannot convert cell "" to coordinates: invalid cell name ""`)
+ assert.EqualError(t, f.DeleteChart("Sheet1", ""), newCellNameToCoordinatesError("", newInvalidCellNameError("")).Error())
// Test delete chart on no chart worksheet.
assert.NoError(t, NewFile().DeleteChart("Sheet1", "A1"))
assert.NoError(t, f.Close())
diff --git a/col_test.go b/col_test.go
index da46f785..2dd27dbf 100644
--- a/col_test.go
+++ b/col_test.go
@@ -120,7 +120,7 @@ func TestGetColsError(t *testing.T) {
f.Pkg.Store("xl/worksheets/sheet1.xml", []byte(`B
`))
_, err = f.GetCols("Sheet1")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
f = NewFile()
cols, err := f.Cols("Sheet1")
@@ -130,7 +130,7 @@ func TestGetColsError(t *testing.T) {
cols.curCol = 1
cols.sheetXML = []byte(`A
`)
_, err = cols.Rows()
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestColsRows(t *testing.T) {
@@ -208,12 +208,12 @@ func TestColumnVisibility(t *testing.T) {
// 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 "*"`)
+ assert.EqualError(t, err, newInvalidColumnNameError("*").Error())
+ assert.EqualError(t, f.SetColVisible("Sheet1", "*", false), newInvalidColumnNameError("*").Error())
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("Sheet1", "A:-1", true), newInvalidColumnNameError("-1").Error())
assert.EqualError(t, f.SetColVisible("SheetN", "E", false), "sheet SheetN is not exist")
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestColumnVisibility.xlsx")))
})
@@ -258,20 +258,20 @@ func TestOutlineLevel(t *testing.T) {
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 "*"`)
+ assert.EqualError(t, f.SetColOutlineLevel("Sheet1", "*", 1), newInvalidColumnNameError("*").Error())
_, err = f.GetColOutlineLevel("Sheet1", "*")
- assert.EqualError(t, err, `invalid column name "*"`)
+ assert.EqualError(t, err, newInvalidColumnNameError("*").Error())
// 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")
+ assert.EqualError(t, f.SetRowOutlineLevel("Sheet1", 0, 1), newInvalidRowNumberError(0).Error())
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`)
+ assert.EqualError(t, err, newInvalidRowNumberError(0).Error())
level, err = f.GetRowOutlineLevel("Sheet1", 10)
assert.NoError(t, err)
@@ -293,8 +293,8 @@ func TestSetColStyle(t *testing.T) {
// 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.EqualError(t, f.SetColStyle("Sheet1", "*", style), newInvalidColumnNameError("*").Error())
+ assert.EqualError(t, f.SetColStyle("Sheet1", "A:*", style), newInvalidColumnNameError("*").Error())
assert.NoError(t, f.SetColStyle("Sheet1", "B", style))
// Test set column style with already exists column with style.
@@ -317,9 +317,9 @@ func TestColWidth(t *testing.T) {
// 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 "*"`)
+ assert.EqualError(t, err, newInvalidColumnNameError("*").Error())
+ assert.EqualError(t, f.SetColWidth("Sheet1", "*", "B", 1), newInvalidColumnNameError("*").Error())
+ assert.EqualError(t, f.SetColWidth("Sheet1", "A", "*", 1), newInvalidColumnNameError("*").Error())
// Test set column width on not exists worksheet.
assert.EqualError(t, f.SetColWidth("SheetN", "B", "A", 12), "sheet SheetN is not exist")
@@ -345,7 +345,7 @@ func TestInsertCol(t *testing.T) {
assert.NoError(t, f.InsertCol(sheet1, "A"))
// Test insert column with illegal cell coordinates.
- assert.EqualError(t, f.InsertCol("Sheet1", "*"), `invalid column name "*"`)
+ assert.EqualError(t, f.InsertCol("Sheet1", "*"), newInvalidColumnNameError("*").Error())
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestInsertCol.xlsx")))
}
@@ -366,7 +366,7 @@ func TestRemoveCol(t *testing.T) {
assert.NoError(t, f.RemoveCol(sheet1, "A"))
// Test remove column with illegal cell coordinates.
- assert.EqualError(t, f.RemoveCol("Sheet1", "*"), `invalid column name "*"`)
+ assert.EqualError(t, f.RemoveCol("Sheet1", "*"), newInvalidColumnNameError("*").Error())
// Test remove column on not exists worksheet.
assert.EqualError(t, f.RemoveCol("SheetN", "B"), "sheet SheetN is not exist")
diff --git a/comment_test.go b/comment_test.go
index fb36d290..9eb07f43 100644
--- a/comment_test.go
+++ b/comment_test.go
@@ -32,7 +32,7 @@ func TestAddComments(t *testing.T) {
// Test add comment on not exists worksheet.
assert.EqualError(t, f.AddComment("SheetN", "B7", `{"author":"Excelize: ","text":"This is a comment."}`), "sheet SheetN is not exist")
// Test add comment on with illegal cell coordinates
- assert.EqualError(t, f.AddComment("Sheet1", "A", `{"author":"Excelize: ","text":"This is a comment."}`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.AddComment("Sheet1", "A", `{"author":"Excelize: ","text":"This is a comment."}`), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
if assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddComments.xlsx"))) {
assert.Len(t, f.GetComments(), 2)
}
diff --git a/crypt_test.go b/crypt_test.go
index cb0b160b..0796482a 100644
--- a/crypt_test.go
+++ b/crypt_test.go
@@ -21,16 +21,16 @@ import (
func TestEncrypt(t *testing.T) {
f, err := OpenFile(filepath.Join("test", "encryptSHA1.xlsx"), Options{Password: "password"})
assert.NoError(t, err)
- assert.EqualError(t, f.SaveAs(filepath.Join("test", "BadEncrypt.xlsx"), Options{Password: "password"}), "not support encryption currently")
+ assert.EqualError(t, f.SaveAs(filepath.Join("test", "BadEncrypt.xlsx"), Options{Password: "password"}), ErrEncrypt.Error())
assert.NoError(t, f.Close())
}
func TestEncryptionMechanism(t *testing.T) {
mechanism, err := encryptionMechanism([]byte{3, 0, 3, 0})
assert.Equal(t, mechanism, "extensible")
- assert.EqualError(t, err, "unsupport encryption mechanism")
+ assert.EqualError(t, err, ErrUnsupportEncryptMechanism.Error())
_, err = encryptionMechanism([]byte{})
- assert.EqualError(t, err, "unknown encryption mechanism")
+ assert.EqualError(t, err, ErrUnknownEncryptMechanism.Error())
}
func TestHashing(t *testing.T) {
diff --git a/datavalidation_test.go b/datavalidation_test.go
index c35693ce..56e7d735 100644
--- a/datavalidation_test.go
+++ b/datavalidation_test.go
@@ -164,13 +164,13 @@ func TestDeleteDataValidation(t *testing.T) {
dvRange.Sqref = "A"
assert.NoError(t, f.AddDataValidation("Sheet1", dvRange))
- assert.EqualError(t, f.DeleteDataValidation("Sheet1", "A1"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.DeleteDataValidation("Sheet1", "A1"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
- assert.EqualError(t, f.DeleteDataValidation("Sheet1", "A1:A"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.DeleteDataValidation("Sheet1", "A1:A"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
ws, ok := f.Sheet.Load("xl/worksheets/sheet1.xml")
assert.True(t, ok)
ws.(*xlsxWorksheet).DataValidations.DataValidation[0].Sqref = "A1:A"
- assert.EqualError(t, f.DeleteDataValidation("Sheet1", "A1:B2"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.DeleteDataValidation("Sheet1", "A1:B2"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
// Test delete data validation on no exists worksheet.
assert.EqualError(t, f.DeleteDataValidation("SheetN", "A1:B2"), "sheet SheetN is not exist")
diff --git a/date_test.go b/date_test.go
index cc516d57..cc21e58a 100644
--- a/date_test.go
+++ b/date_test.go
@@ -99,5 +99,5 @@ func TestExcelDateToTime(t *testing.T) {
}
// Check error case
_, err := ExcelDateToTime(-1, false)
- assert.EqualError(t, err, "invalid date value -1.000000, negative values are not supported")
+ assert.EqualError(t, err, newInvalidExcelDateError(-1).Error())
}
diff --git a/errors.go b/errors.go
index f9eedde7..4230c148 100644
--- a/errors.go
+++ b/errors.go
@@ -56,6 +56,12 @@ func newFieldLengthError(name string) error {
return fmt.Errorf("field %s must be less or equal than 255 characters", name)
}
+// newCellNameToCoordinatesError defined the error message on converts
+// alphanumeric cell name to coordinates.
+func newCellNameToCoordinatesError(cell string, err error) error {
+ return fmt.Errorf("cannot convert cell %q to coordinates: %v", cell, err)
+}
+
var (
// ErrStreamSetColWidth defined the error message on set column width in
// stream writing mode.
@@ -139,4 +145,24 @@ var (
// ErrOptionsUnzipSizeLimit defined the error message for receiving
// invalid UnzipSizeLimit and WorksheetUnzipMemLimit.
ErrOptionsUnzipSizeLimit = errors.New("the value of UnzipSizeLimit should be greater than or equal to WorksheetUnzipMemLimit")
+ // ErrSave defined the error message for saving file.
+ ErrSave = errors.New("no path defined for file, consider File.WriteTo or File.Write")
+ // ErrAttrValBool defined the error message on marshal and unmarshal
+ // boolean type XML attribute.
+ ErrAttrValBool = errors.New("unexpected child of attrValBool")
+ // ErrSparklineType defined the error message on receive the invalid
+ // sparkline Type parameters.
+ ErrSparklineType = errors.New("parameter 'Type' must be 'line', 'column' or 'win_loss'")
+ // ErrSparklineLocation defined the error message on missing Location
+ // parameters
+ ErrSparklineLocation = errors.New("parameter 'Location' is required")
+ // ErrSparklineRange defined the error message on missing sparkline Range
+ // parameters
+ ErrSparklineRange = errors.New("parameter 'Range' is required")
+ // ErrSparkline defined the error message on receive the invalid sparkline
+ // parameters.
+ ErrSparkline = errors.New("must have the same number of 'Location' and 'Range' parameters")
+ // ErrSparklineStyle defined the error message on receive the invalid
+ // sparkline Style parameters.
+ ErrSparklineStyle = errors.New("parameter 'Style' must betweent 0-35")
)
diff --git a/excelize_test.go b/excelize_test.go
index f556d83c..a15e8012 100644
--- a/excelize_test.go
+++ b/excelize_test.go
@@ -45,12 +45,12 @@ func TestOpenFile(t *testing.T) {
// Test set cell value with illegal row number.
assert.EqualError(t, f.SetCellDefault("Sheet2", "A", strconv.FormatFloat(float64(-100.1588), 'f', -1, 64)),
- `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.NoError(t, f.SetCellInt("Sheet2", "A1", 100))
// Test set cell integer value with illegal row number.
- assert.EqualError(t, f.SetCellInt("Sheet2", "A", 100), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.SetCellInt("Sheet2", "A", 100), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.NoError(t, f.SetCellStr("Sheet2", "C11", "Knowns"))
// Test max characters in a cell.
@@ -63,7 +63,7 @@ func TestOpenFile(t *testing.T) {
assert.EqualError(t, f.SetCellStr("Sheet10", "b230", "10"), "sheet Sheet10 is not exist")
// Test set cell string value with illegal row number.
- assert.EqualError(t, f.SetCellStr("Sheet1", "A", "10"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.SetCellStr("Sheet1", "A", "10"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
f.SetActiveSheet(2)
// Test get cell formula with given rows number.
@@ -77,7 +77,7 @@ func TestOpenFile(t *testing.T) {
// Test get cell formula with illegal rows number.
_, err = f.GetCellFormula("Sheet1", "B")
- assert.EqualError(t, err, `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("B", newInvalidCellNameError("B")).Error())
// Test get shared cell formula
_, err = f.GetCellFormula("Sheet2", "H11")
assert.NoError(t, err)
@@ -87,9 +87,9 @@ func TestOpenFile(t *testing.T) {
// Test read cell value with given illegal rows number.
_, err = f.GetCellValue("Sheet2", "a-1")
- assert.EqualError(t, err, `cannot convert cell "A-1" to coordinates: invalid cell name "A-1"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A-1", newInvalidCellNameError("A-1")).Error())
_, err = f.GetCellValue("Sheet2", "A")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
// Test read cell value with given lowercase column number.
_, err = f.GetCellValue("Sheet2", "a5")
@@ -324,7 +324,7 @@ func TestNewFile(t *testing.T) {
func TestAddDrawingVML(t *testing.T) {
// Test addDrawingVML with illegal cell coordinates.
f := NewFile()
- assert.EqualError(t, f.addDrawingVML(0, "", "*", 0, 0), `cannot convert cell "*" to coordinates: invalid cell name "*"`)
+ assert.EqualError(t, f.addDrawingVML(0, "", "*", 0, 0), newCellNameToCoordinatesError("*", newInvalidCellNameError("*")).Error())
}
func TestSetCellHyperLink(t *testing.T) {
@@ -368,7 +368,7 @@ func TestSetCellHyperLink(t *testing.T) {
assert.True(t, ok)
ws.(*xlsxWorksheet).MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A:A"}}}
err = f.SetCellHyperLink("Sheet1", "A1", "https://github.com/xuri/excelize", "External")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestGetCellHyperLink(t *testing.T) {
@@ -408,7 +408,7 @@ func TestGetCellHyperLink(t *testing.T) {
assert.True(t, ok)
ws.(*xlsxWorksheet).MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A:A"}}}
link, target, err = f.GetCellHyperLink("Sheet1", "A1")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.Equal(t, link, false)
assert.Equal(t, target, "")
}
@@ -570,13 +570,13 @@ func TestSetCellStyleAlignment(t *testing.T) {
assert.NoError(t, f.SetCellStyle("Sheet1", "A22", "A22", style))
// Test set cell style with given illegal rows number.
- assert.EqualError(t, f.SetCellStyle("Sheet1", "A", "A22", style), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- assert.EqualError(t, f.SetCellStyle("Sheet1", "A22", "A", style), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.SetCellStyle("Sheet1", "A", "A22", style), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
+ assert.EqualError(t, f.SetCellStyle("Sheet1", "A22", "A", style), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
// Test get cell style with given illegal rows number.
index, err := f.GetCellStyle("Sheet1", "A")
assert.Equal(t, 0, index)
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestSetCellStyleAlignment.xlsx")))
}
@@ -1109,7 +1109,7 @@ func TestSetSheetRow(t *testing.T) {
assert.NoError(t, f.SetSheetRow("Sheet1", "B27", &[]interface{}{"cell", nil, int32(42), float64(42), time.Now().UTC()}))
assert.EqualError(t, f.SetSheetRow("Sheet1", "", &[]interface{}{"cell", nil, 2}),
- `cannot convert cell "" to coordinates: invalid cell name ""`)
+ newCellNameToCoordinatesError("", newInvalidCellNameError("")).Error())
assert.EqualError(t, f.SetSheetRow("Sheet1", "B27", []interface{}{}), ErrParameterInvalid.Error())
assert.EqualError(t, f.SetSheetRow("Sheet1", "B27", &f), ErrParameterInvalid.Error())
@@ -1181,7 +1181,7 @@ func TestSetDefaultTimeStyle(t *testing.T) {
assert.EqualError(t, f.setDefaultTimeStyle("SheetN", "", 0), "sheet SheetN is not exist")
// Test set default time style on invalid cell
- assert.EqualError(t, f.setDefaultTimeStyle("Sheet1", "", 42), "cannot convert cell \"\" to coordinates: invalid cell name \"\"")
+ assert.EqualError(t, f.setDefaultTimeStyle("Sheet1", "", 42), newCellNameToCoordinatesError("", newInvalidCellNameError("")).Error())
}
func TestAddVBAProject(t *testing.T) {
diff --git a/file.go b/file.go
index a430c5f4..e2aeb4a0 100644
--- a/file.go
+++ b/file.go
@@ -14,7 +14,6 @@ package excelize
import (
"archive/zip"
"bytes"
- "fmt"
"io"
"os"
"path/filepath"
@@ -58,7 +57,7 @@ func NewFile() *File {
// Save provides a function to override the spreadsheet with origin path.
func (f *File) Save() error {
if f.Path == "" {
- return fmt.Errorf("no path defined for file, consider File.WriteTo or File.Write")
+ return ErrSave
}
return f.SaveAs(f.Path)
}
diff --git a/lib.go b/lib.go
index ccb09ac6..0efc180c 100644
--- a/lib.go
+++ b/lib.go
@@ -16,7 +16,6 @@ import (
"bytes"
"container/list"
"encoding/xml"
- "errors"
"fmt"
"io"
"io/ioutil"
@@ -240,11 +239,9 @@ func ColumnNumberToName(num int) (string, error) {
// excelize.CellNameToCoordinates("Z3") // returns 26, 3, nil
//
func CellNameToCoordinates(cell string) (int, int, error) {
- const msg = "cannot convert cell %q to coordinates: %v"
-
colname, row, err := SplitCellName(cell)
if err != nil {
- return -1, -1, fmt.Errorf(msg, cell, err)
+ return -1, -1, newCellNameToCoordinatesError(cell, err)
}
if row > TotalRows {
return -1, -1, ErrMaxRows
@@ -447,7 +444,7 @@ func (avb *attrValBool) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err
found := false
switch t.(type) {
case xml.StartElement:
- return errors.New("unexpected child of attrValBool")
+ return ErrAttrValBool
case xml.EndElement:
found = true
}
diff --git a/lib_test.go b/lib_test.go
index 35dd2a01..3346acc6 100644
--- a/lib_test.go
+++ b/lib_test.go
@@ -184,7 +184,7 @@ func TestCellNameToCoordinates_Error(t *testing.T) {
}
}
_, _, err := CellNameToCoordinates("A1048577")
- assert.EqualError(t, err, "row number exceeds maximum limit")
+ assert.EqualError(t, err, ErrMaxRows.Error())
}
func TestCoordinatesToCellName_OK(t *testing.T) {
diff --git a/merge_test.go b/merge_test.go
index 8d9ad41e..a28aeff3 100644
--- a/merge_test.go
+++ b/merge_test.go
@@ -12,7 +12,7 @@ func TestMergeCell(t *testing.T) {
if !assert.NoError(t, err) {
t.FailNow()
}
- assert.EqualError(t, f.MergeCell("Sheet1", "A", "B"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.MergeCell("Sheet1", "A", "B"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.NoError(t, f.MergeCell("Sheet1", "D9", "D9"))
assert.NoError(t, f.MergeCell("Sheet1", "D9", "E9"))
assert.NoError(t, f.MergeCell("Sheet1", "H14", "G13"))
@@ -156,7 +156,7 @@ func TestUnmergeCell(t *testing.T) {
mergeCellNum := len(sheet.MergeCells.Cells)
- assert.EqualError(t, f.UnmergeCell("Sheet1", "A", "A"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.UnmergeCell("Sheet1", "A", "A"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
// unmerge the mergecell that contains A1
assert.NoError(t, f.UnmergeCell(sheet1, "A1", "A1"))
@@ -190,7 +190,7 @@ func TestUnmergeCell(t *testing.T) {
ws, ok = f.Sheet.Load("xl/worksheets/sheet1.xml")
assert.True(t, ok)
ws.(*xlsxWorksheet).MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A:A"}}}
- assert.EqualError(t, f.UnmergeCell("Sheet1", "A2", "B3"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.UnmergeCell("Sheet1", "A2", "B3"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestFlatMergedCells(t *testing.T) {
diff --git a/picture_test.go b/picture_test.go
index 29279768..5bf139d5 100644
--- a/picture_test.go
+++ b/picture_test.go
@@ -60,7 +60,7 @@ func TestAddPicture(t *testing.T) {
// Test add picture to worksheet from bytes.
assert.NoError(t, f.AddPictureFromBytes("Sheet1", "Q1", "", "Excel Logo", ".png", file))
// Test add picture to worksheet from bytes with illegal cell coordinates.
- assert.EqualError(t, f.AddPictureFromBytes("Sheet1", "A", "", "Excel Logo", ".png", file), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.AddPictureFromBytes("Sheet1", "A", "", "Excel Logo", ".png", file), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.NoError(t, f.AddPicture("Sheet1", "Q8", filepath.Join("test", "images", "excel.gif"), ""))
assert.NoError(t, f.AddPicture("Sheet1", "Q15", filepath.Join("test", "images", "excel.jpg"), ""))
@@ -110,7 +110,7 @@ func TestGetPicture(t *testing.T) {
// Try to get picture from a worksheet with illegal cell coordinates.
_, _, err = f.GetPicture("Sheet1", "A")
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
// Try to get picture from a worksheet that doesn't contain any images.
file, raw, err = f.GetPicture("Sheet3", "I9")
@@ -165,7 +165,7 @@ func TestGetPicture(t *testing.T) {
func TestAddDrawingPicture(t *testing.T) {
// testing addDrawingPicture with illegal cell coordinates.
f := NewFile()
- assert.EqualError(t, f.addDrawingPicture("sheet1", "", "A", "", 0, 0, 0, 0, nil), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.addDrawingPicture("sheet1", "", "A", "", 0, 0, 0, 0, nil), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestAddPictureFromBytes(t *testing.T) {
@@ -195,7 +195,7 @@ func TestDeletePicture(t *testing.T) {
// Test delete picture on not exists worksheet.
assert.EqualError(t, f.DeletePicture("SheetN", "A1"), "sheet SheetN is not exist")
// Test delete picture with invalid coordinates.
- assert.EqualError(t, f.DeletePicture("Sheet1", ""), `cannot convert cell "" to coordinates: invalid cell name ""`)
+ assert.EqualError(t, f.DeletePicture("Sheet1", ""), newCellNameToCoordinatesError("", newInvalidCellNameError("")).Error())
assert.NoError(t, f.Close())
// Test delete picture on no chart worksheet.
assert.NoError(t, NewFile().DeletePicture("Sheet1", "A1"))
@@ -208,9 +208,9 @@ func TestDrawingResize(t *testing.T) {
assert.EqualError(t, err, "sheet SheetN is not exist")
// Test calculate drawing resize with invalid coordinates.
_, _, _, _, err = f.drawingResize("Sheet1", "", 1, 1, nil)
- assert.EqualError(t, err, `cannot convert cell "" to coordinates: invalid cell name ""`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("", newInvalidCellNameError("")).Error())
ws, ok := f.Sheet.Load("xl/worksheets/sheet1.xml")
assert.True(t, ok)
ws.(*xlsxWorksheet).MergeCells = &xlsxMergeCells{Cells: []*xlsxMergeCell{{Ref: "A:A"}}}
- assert.EqualError(t, f.AddPicture("Sheet1", "A1", filepath.Join("test", "images", "excel.jpg"), `{"autofit": true}`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.AddPicture("Sheet1", "A1", filepath.Join("test", "images", "excel.jpg"), `{"autofit": true}`), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
diff --git a/pivotTable_test.go b/pivotTable_test.go
index dbb82523..34877933 100644
--- a/pivotTable_test.go
+++ b/pivotTable_test.go
@@ -158,7 +158,7 @@ func TestAddPivotTable(t *testing.T) {
}))
// Test empty pivot table options
- assert.EqualError(t, f.AddPivotTable(nil), "parameter is required")
+ assert.EqualError(t, f.AddPivotTable(nil), ErrParameterRequired.Error())
// Test invalid data range
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
DataRange: "Sheet1!$A$1:$A$1",
@@ -227,7 +227,7 @@ func TestAddPivotTable(t *testing.T) {
// Test adjust range with invalid range
_, _, err := f.adjustRange("")
- assert.EqualError(t, err, "parameter is required")
+ assert.EqualError(t, err, ErrParameterRequired.Error())
// Test adjust range with incorrect range
_, _, err = f.adjustRange("sheet1!")
assert.EqualError(t, err, "parameter is invalid")
diff --git a/rows_test.go b/rows_test.go
index 9fee3d9e..0c154a46 100644
--- a/rows_test.go
+++ b/rows_test.go
@@ -111,10 +111,10 @@ func TestRowHeight(t *testing.T) {
f := NewFile()
sheet1 := f.GetSheetName(0)
- assert.EqualError(t, f.SetRowHeight(sheet1, 0, defaultRowHeightPixels+1.0), "invalid row number 0")
+ assert.EqualError(t, f.SetRowHeight(sheet1, 0, defaultRowHeightPixels+1.0), newInvalidRowNumberError(0).Error())
_, err := f.GetRowHeight("Sheet1", 0)
- assert.EqualError(t, err, "invalid row number 0")
+ assert.EqualError(t, err, newInvalidRowNumberError(0).Error())
assert.NoError(t, f.SetRowHeight(sheet1, 1, 111.0))
height, err := f.GetRowHeight(sheet1, 1)
@@ -190,7 +190,7 @@ func TestColumns(t *testing.T) {
rows.curRow = 3
rows.decoder = f.xmlNewDecoder(bytes.NewReader([]byte(`1
`)))
_, err = rows.Columns()
- assert.EqualError(t, err, `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
// Test token is nil
rows.decoder = f.xmlNewDecoder(bytes.NewReader(nil))
@@ -220,12 +220,12 @@ func TestRowVisibility(t *testing.T) {
visiable, err = f.GetRowVisible("Sheet3", 25)
assert.Equal(t, false, visiable)
assert.NoError(t, err)
- assert.EqualError(t, f.SetRowVisible("Sheet3", 0, true), "invalid row number 0")
+ assert.EqualError(t, f.SetRowVisible("Sheet3", 0, true), newInvalidRowNumberError(0).Error())
assert.EqualError(t, f.SetRowVisible("SheetN", 2, false), "sheet SheetN is not exist")
visible, err := f.GetRowVisible("Sheet3", 0)
assert.Equal(t, false, visible)
- assert.EqualError(t, err, "invalid row number 0")
+ assert.EqualError(t, err, newInvalidRowNumberError(0).Error())
_, err = f.GetRowVisible("SheetN", 1)
assert.EqualError(t, err, "sheet SheetN is not exist")
@@ -245,9 +245,9 @@ func TestRemoveRow(t *testing.T) {
assert.NoError(t, f.SetCellHyperLink(sheet1, "A5", "https://github.com/xuri/excelize", "External"))
- assert.EqualError(t, f.RemoveRow(sheet1, -1), "invalid row number -1")
+ assert.EqualError(t, f.RemoveRow(sheet1, -1), newInvalidRowNumberError(-1).Error())
- assert.EqualError(t, f.RemoveRow(sheet1, 0), "invalid row number 0")
+ assert.EqualError(t, f.RemoveRow(sheet1, 0), newInvalidRowNumberError(0).Error())
assert.NoError(t, f.RemoveRow(sheet1, 4))
if !assert.Len(t, r.SheetData.Row, rowCount-1) {
@@ -306,9 +306,9 @@ func TestInsertRow(t *testing.T) {
assert.NoError(t, f.SetCellHyperLink(sheet1, "A5", "https://github.com/xuri/excelize", "External"))
- assert.EqualError(t, f.InsertRow(sheet1, -1), "invalid row number -1")
+ assert.EqualError(t, f.InsertRow(sheet1, -1), newInvalidRowNumberError(-1).Error())
- assert.EqualError(t, f.InsertRow(sheet1, 0), "invalid row number 0")
+ assert.EqualError(t, f.InsertRow(sheet1, 0), newInvalidRowNumberError(0).Error())
assert.NoError(t, f.InsertRow(sheet1, 1))
if !assert.Len(t, r.SheetData.Row, rowCount+1) {
@@ -484,7 +484,7 @@ func TestDuplicateRowZeroWithNoRows(t *testing.T) {
t.Run("ZeroWithNoRows", func(t *testing.T) {
f := NewFile()
- assert.EqualError(t, f.DuplicateRow(sheet, 0), "invalid row number 0")
+ assert.EqualError(t, f.DuplicateRow(sheet, 0), newInvalidRowNumberError(0).Error())
if !assert.NoError(t, f.SaveAs(fmt.Sprintf(outFile, "ZeroWithNoRows"))) {
t.FailNow()
@@ -800,7 +800,7 @@ func TestDuplicateRowInvalidRowNum(t *testing.T) {
assert.NoError(t, f.SetCellStr(sheet, col, val))
}
- assert.EqualError(t, f.DuplicateRow(sheet, row), fmt.Sprintf("invalid row number %d", row))
+ assert.EqualError(t, f.DuplicateRow(sheet, row), newInvalidRowNumberError(row).Error())
for col, val := range cells {
v, err := f.GetCellValue(sheet, col)
@@ -822,7 +822,7 @@ func TestDuplicateRowInvalidRowNum(t *testing.T) {
assert.NoError(t, f.SetCellStr(sheet, col, val))
}
- assert.EqualError(t, f.DuplicateRowTo(sheet, row1, row2), fmt.Sprintf("invalid row number %d", row1))
+ assert.EqualError(t, f.DuplicateRowTo(sheet, row1, row2), newInvalidRowNumberError(row1).Error())
for col, val := range cells {
v, err := f.GetCellValue(sheet, col)
@@ -897,7 +897,7 @@ func TestCheckRow(t *testing.T) {
f.Pkg.Store("xl/worksheets/sheet1.xml", []byte(`12345
`))
f.Sheet.Delete("xl/worksheets/sheet1.xml")
delete(f.checked, "xl/worksheets/sheet1.xml")
- assert.EqualError(t, f.SetCellValue("Sheet1", "A1", false), `cannot convert cell "-" to coordinates: invalid cell name "-"`)
+ assert.EqualError(t, f.SetCellValue("Sheet1", "A1", false), newCellNameToCoordinatesError("-", newInvalidCellNameError("-")).Error())
}
func TestSetRowStyle(t *testing.T) {
diff --git a/shape_test.go b/shape_test.go
index a02e53da..2f005894 100644
--- a/shape_test.go
+++ b/shape_test.go
@@ -56,7 +56,7 @@ func TestAddShape(t *testing.T) {
"color": "2980B9"
}
}]
- }`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ }`), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddShape1.xlsx")))
// Test add first shape for given sheet.
diff --git a/sheet_test.go b/sheet_test.go
index d33ba99d..9bfee70a 100644
--- a/sheet_test.go
+++ b/sheet_test.go
@@ -207,7 +207,7 @@ func TestSearchSheet(t *testing.T) {
f.Pkg.Store("xl/worksheets/sheet1.xml", []byte(`A
`))
result, err = f.SearchSheet("Sheet1", "A")
- assert.EqualError(t, err, "cannot convert cell \"A\" to coordinates: invalid cell name \"A\"")
+ assert.EqualError(t, err, newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.Equal(t, []string(nil), result)
f.Pkg.Store("xl/worksheets/sheet1.xml", []byte(`A
`))
@@ -236,7 +236,7 @@ func TestSetHeaderFooter(t *testing.T) {
// Test set header and footer with illegal setting.
assert.EqualError(t, f.SetHeaderFooter("Sheet1", &FormatHeaderFooter{
OddHeader: strings.Repeat("c", MaxFieldLength+1),
- }), "field OddHeader must be less or equal than 255 characters")
+ }), newFieldLengthError("OddHeader").Error())
assert.NoError(t, f.SetHeaderFooter("Sheet1", nil))
text := strings.Repeat("δΈ€", MaxFieldLength)
@@ -276,10 +276,10 @@ func TestDefinedName(t *testing.T) {
Name: "Amount",
RefersTo: "Sheet1!$A$2:$D$5",
Comment: "defined name comment",
- }), "the same name already exists on the scope")
+ }), ErrDefinedNameduplicate.Error())
assert.EqualError(t, f.DeleteDefinedName(&DefinedName{
Name: "No Exist Defined Name",
- }), "no defined name on the scope")
+ }), ErrDefinedNameScope.Error())
assert.Exactly(t, "Sheet1!$A$2:$D$5", f.GetDefinedName()[1].RefersTo)
assert.NoError(t, f.DeleteDefinedName(&DefinedName{
Name: "Amount",
@@ -316,7 +316,7 @@ func TestInsertPageBreak(t *testing.T) {
assert.NoError(t, f.InsertPageBreak("Sheet1", "B2"))
assert.NoError(t, f.InsertPageBreak("Sheet1", "C3"))
assert.NoError(t, f.InsertPageBreak("Sheet1", "C3"))
- assert.EqualError(t, f.InsertPageBreak("Sheet1", "A"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.InsertPageBreak("Sheet1", "A"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.EqualError(t, f.InsertPageBreak("SheetN", "C3"), "sheet SheetN is not exist")
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestInsertPageBreak.xlsx")))
}
@@ -342,7 +342,7 @@ func TestRemovePageBreak(t *testing.T) {
assert.NoError(t, f.InsertPageBreak("Sheet2", "C2"))
assert.NoError(t, f.RemovePageBreak("Sheet2", "B2"))
- assert.EqualError(t, f.RemovePageBreak("Sheet1", "A"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, f.RemovePageBreak("Sheet1", "A"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.EqualError(t, f.RemovePageBreak("SheetN", "C3"), "sheet SheetN is not exist")
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestRemovePageBreak.xlsx")))
}
diff --git a/sparkline.go b/sparkline.go
index 917383d9..0d5ef6e1 100644
--- a/sparkline.go
+++ b/sparkline.go
@@ -13,7 +13,6 @@ package excelize
import (
"encoding/xml"
- "errors"
"io"
"strings"
)
@@ -410,7 +409,7 @@ func (f *File) AddSparkline(sheet string, opt *SparklineOption) (err error) {
sparkTypes = map[string]string{"line": "line", "column": "column", "win_loss": "stacked"}
if opt.Type != "" {
if specifiedSparkTypes, ok = sparkTypes[opt.Type]; !ok {
- err = errors.New("parameter 'Type' must be 'line', 'column' or 'win_loss'")
+ err = ErrSparklineType
return
}
sparkType = specifiedSparkTypes
@@ -470,17 +469,17 @@ func (f *File) parseFormatAddSparklineSet(sheet string, opt *SparklineOption) (*
return ws, ErrParameterRequired
}
if len(opt.Location) < 1 {
- return ws, errors.New("parameter 'Location' is required")
+ return ws, ErrSparklineLocation
}
if len(opt.Range) < 1 {
- return ws, errors.New("parameter 'Range' is required")
+ return ws, ErrSparklineRange
}
// The ranges and locations must match.\
if len(opt.Location) != len(opt.Range) {
- return ws, errors.New(`must have the same number of 'Location' and 'Range' parameters`)
+ return ws, ErrSparkline
}
if opt.Style < 0 || opt.Style > 35 {
- return ws, errors.New("parameter 'Style' must betweent 0-35")
+ return ws, ErrSparklineStyle
}
if ws.ExtLst == nil {
ws.ExtLst = &xlsxExtLst{}
diff --git a/sparkline_test.go b/sparkline_test.go
index 0777ee16..c21687cb 100644
--- a/sparkline_test.go
+++ b/sparkline_test.go
@@ -220,38 +220,38 @@ func TestAddSparkline(t *testing.T) {
Range: []string{"Sheet2!A3:E3"},
}), "sheet SheetN is not exist")
- assert.EqualError(t, f.AddSparkline("Sheet1", nil), "parameter is required")
+ assert.EqualError(t, f.AddSparkline("Sheet1", nil), ErrParameterRequired.Error())
assert.EqualError(t, f.AddSparkline("Sheet1", &SparklineOption{
Range: []string{"Sheet2!A3:E3"},
- }), `parameter 'Location' is required`)
+ }), ErrSparklineLocation.Error())
assert.EqualError(t, f.AddSparkline("Sheet1", &SparklineOption{
Location: []string{"F3"},
- }), `parameter 'Range' is required`)
+ }), ErrSparklineRange.Error())
assert.EqualError(t, f.AddSparkline("Sheet1", &SparklineOption{
Location: []string{"F2", "F3"},
Range: []string{"Sheet2!A3:E3"},
- }), `must have the same number of 'Location' and 'Range' parameters`)
+ }), ErrSparkline.Error())
assert.EqualError(t, f.AddSparkline("Sheet1", &SparklineOption{
Location: []string{"F3"},
Range: []string{"Sheet2!A3:E3"},
Type: "unknown_type",
- }), `parameter 'Type' must be 'line', 'column' or 'win_loss'`)
+ }), ErrSparklineType.Error())
assert.EqualError(t, f.AddSparkline("Sheet1", &SparklineOption{
Location: []string{"F3"},
Range: []string{"Sheet2!A3:E3"},
Style: -1,
- }), `parameter 'Style' must betweent 0-35`)
+ }), ErrSparklineStyle.Error())
assert.EqualError(t, f.AddSparkline("Sheet1", &SparklineOption{
Location: []string{"F3"},
Range: []string{"Sheet2!A3:E3"},
Style: -1,
- }), `parameter 'Style' must betweent 0-35`)
+ }), ErrSparklineStyle.Error())
ws, ok := f.Sheet.Load("xl/worksheets/sheet1.xml")
assert.True(t, ok)
diff --git a/stream_test.go b/stream_test.go
index 52cee4de..833a00ac 100644
--- a/stream_test.go
+++ b/stream_test.go
@@ -174,8 +174,8 @@ func TestStreamTable(t *testing.T) {
// Test add table with illegal formatset.
assert.EqualError(t, streamWriter.AddTable("B26", "A21", `{x}`), "invalid character 'x' looking for beginning of object key string")
// Test add table with illegal cell coordinates.
- assert.EqualError(t, streamWriter.AddTable("A", "B1", `{}`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- assert.EqualError(t, streamWriter.AddTable("A1", "B", `{}`), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+ assert.EqualError(t, streamWriter.AddTable("A", "B1", `{}`), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
+ assert.EqualError(t, streamWriter.AddTable("A1", "B", `{}`), newCellNameToCoordinatesError("B", newInvalidCellNameError("B")).Error())
}
func TestStreamMergeCells(t *testing.T) {
@@ -184,7 +184,7 @@ func TestStreamMergeCells(t *testing.T) {
assert.NoError(t, err)
assert.NoError(t, streamWriter.MergeCell("A1", "D1"))
// Test merge cells with illegal cell coordinates.
- assert.EqualError(t, streamWriter.MergeCell("A", "D1"), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, streamWriter.MergeCell("A", "D1"), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
assert.NoError(t, streamWriter.Flush())
// Save spreadsheet by the given path.
assert.NoError(t, file.SaveAs(filepath.Join("test", "TestStreamMergeCells.xlsx")))
@@ -204,7 +204,7 @@ func TestSetRow(t *testing.T) {
file := NewFile()
streamWriter, err := file.NewStreamWriter("Sheet1")
assert.NoError(t, err)
- assert.EqualError(t, streamWriter.SetRow("A", []interface{}{}), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
+ assert.EqualError(t, streamWriter.SetRow("A", []interface{}{}), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
}
func TestSetCellValFunc(t *testing.T) {
diff --git a/table_test.go b/table_test.go
index 95738e13..0a74b1b5 100644
--- a/table_test.go
+++ b/table_test.go
@@ -34,8 +34,8 @@ func TestAddTable(t *testing.T) {
// Test add table with illegal formatset.
assert.EqualError(t, f.AddTable("Sheet1", "B26", "A21", `{x}`), "invalid character 'x' looking for beginning of object key string")
// Test add table with illegal cell coordinates.
- assert.EqualError(t, f.AddTable("Sheet1", "A", "B1", `{}`), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- assert.EqualError(t, f.AddTable("Sheet1", "A1", "B", `{}`), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+ assert.EqualError(t, f.AddTable("Sheet1", "A", "B1", `{}`), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
+ assert.EqualError(t, f.AddTable("Sheet1", "A1", "B", `{}`), newCellNameToCoordinatesError("B", newInvalidCellNameError("B")).Error())
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddTable.xlsx")))
@@ -73,8 +73,8 @@ func TestAutoFilter(t *testing.T) {
}
// testing AutoFilter with illegal cell coordinates.
- assert.EqualError(t, f.AutoFilter("Sheet1", "A", "B1", ""), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
- assert.EqualError(t, f.AutoFilter("Sheet1", "A1", "B", ""), `cannot convert cell "B" to coordinates: invalid cell name "B"`)
+ assert.EqualError(t, f.AutoFilter("Sheet1", "A", "B1", ""), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
+ assert.EqualError(t, f.AutoFilter("Sheet1", "A1", "B", ""), newCellNameToCoordinatesError("B", newInvalidCellNameError("B")).Error())
}
func TestAutoFilterError(t *testing.T) {
@@ -109,7 +109,7 @@ func TestAutoFilterError(t *testing.T) {
assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 1, &formatAutoFilter{
Column: "-",
Expression: "-",
- }), `invalid column name "-"`)
+ }), newInvalidColumnNameError("-").Error())
assert.EqualError(t, f.autoFilter("Sheet1", "A1", 1, 100, &formatAutoFilter{
Column: "A",
Expression: "-",