|
@@ -35,13 +35,22 @@ func TestOpenFile(t *testing.T) {
|
|
|
t.Log("\r\n")
|
|
t.Log("\r\n")
|
|
|
}
|
|
}
|
|
|
xlsx.UpdateLinkedValue()
|
|
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, 32))
|
|
|
xlsx.SetCellDefault("Sheet2", "A1", strconv.FormatFloat(float64(-100.1588), 'f', -1, 64))
|
|
xlsx.SetCellDefault("Sheet2", "A1", strconv.FormatFloat(float64(-100.1588), 'f', -1, 64))
|
|
|
|
|
+
|
|
|
// Test set cell value with illegal row number.
|
|
// 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)
|
|
xlsx.SetCellInt("Sheet2", "A1", 100)
|
|
|
|
|
+
|
|
|
// Test set cell integer value with illegal row number.
|
|
// 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")
|
|
xlsx.SetCellStr("Sheet2", "C11", "Knowns")
|
|
|
// Test max characters in a cell.
|
|
// Test max characters in a cell.
|
|
|
xlsx.SetCellStr("Sheet2", "D11", strings.Repeat("c", 32769))
|
|
xlsx.SetCellStr("Sheet2", "D11", strings.Repeat("c", 32769))
|
|
@@ -51,23 +60,38 @@ func TestOpenFile(t *testing.T) {
|
|
|
xlsx.SetCellInt("Sheet3", "A23", 10)
|
|
xlsx.SetCellInt("Sheet3", "A23", 10)
|
|
|
xlsx.SetCellStr("Sheet3", "b230", "10")
|
|
xlsx.SetCellStr("Sheet3", "b230", "10")
|
|
|
xlsx.SetCellStr("Sheet10", "b230", "10")
|
|
xlsx.SetCellStr("Sheet10", "b230", "10")
|
|
|
|
|
+
|
|
|
// Test set cell string value with illegal row number.
|
|
// 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)
|
|
xlsx.SetActiveSheet(2)
|
|
|
// Test get cell formula with given rows number.
|
|
// Test get cell formula with given rows number.
|
|
|
xlsx.GetCellFormula("Sheet1", "B19")
|
|
xlsx.GetCellFormula("Sheet1", "B19")
|
|
|
// Test get cell formula with illegal worksheet name.
|
|
// Test get cell formula with illegal worksheet name.
|
|
|
xlsx.GetCellFormula("Sheet2", "B20")
|
|
xlsx.GetCellFormula("Sheet2", "B20")
|
|
|
- // Test get cell formula with illegal rows number.
|
|
|
|
|
xlsx.GetCellFormula("Sheet1", "B20")
|
|
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
|
|
// Test get shared cell formula
|
|
|
xlsx.GetCellFormula("Sheet2", "H11")
|
|
xlsx.GetCellFormula("Sheet2", "H11")
|
|
|
xlsx.GetCellFormula("Sheet2", "I11")
|
|
xlsx.GetCellFormula("Sheet2", "I11")
|
|
|
getSharedForumula(&xlsxWorksheet{}, "")
|
|
getSharedForumula(&xlsxWorksheet{}, "")
|
|
|
|
|
+
|
|
|
// Test read cell value with given illegal rows number.
|
|
// 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.
|
|
// Test read cell value with given lowercase column number.
|
|
|
xlsx.GetCellValue("Sheet2", "a5")
|
|
xlsx.GetCellValue("Sheet2", "a5")
|
|
|
xlsx.GetCellValue("Sheet2", "C11")
|
|
xlsx.GetCellValue("Sheet2", "C11")
|
|
@@ -92,10 +116,7 @@ func TestOpenFile(t *testing.T) {
|
|
|
xlsx.SetCellValue("Sheet2", "F15", uint64(1<<32-1))
|
|
xlsx.SetCellValue("Sheet2", "F15", uint64(1<<32-1))
|
|
|
xlsx.SetCellValue("Sheet2", "F16", true)
|
|
xlsx.SetCellValue("Sheet2", "F16", true)
|
|
|
xlsx.SetCellValue("Sheet2", "F17", complex64(5+10i))
|
|
xlsx.SetCellValue("Sheet2", "F17", complex64(5+10i))
|
|
|
- t.Log(letterOnlyMapF('x'))
|
|
|
|
|
- shiftJulianToNoon(1, -0.6)
|
|
|
|
|
- timeFromExcelTime(61, true)
|
|
|
|
|
- timeFromExcelTime(62, true)
|
|
|
|
|
|
|
+
|
|
|
// Test boolean write
|
|
// Test boolean write
|
|
|
booltest := []struct {
|
|
booltest := []struct {
|
|
|
value bool
|
|
value bool
|
|
@@ -108,8 +129,14 @@ func TestOpenFile(t *testing.T) {
|
|
|
xlsx.SetCellValue("Sheet2", "F16", test.value)
|
|
xlsx.SetCellValue("Sheet2", "F16", test.value)
|
|
|
assert.Equal(t, test.expected, xlsx.GetCellValue("Sheet2", "F16"))
|
|
assert.Equal(t, test.expected, xlsx.GetCellValue("Sheet2", "F16"))
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
xlsx.SetCellValue("Sheet2", "G2", nil)
|
|
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
|
|
// 02:46:40
|
|
|
xlsx.SetCellValue("Sheet2", "G5", time.Duration(1e13))
|
|
xlsx.SetCellValue("Sheet2", "G5", time.Duration(1e13))
|
|
|
// Test completion column.
|
|
// Test completion column.
|
|
@@ -298,8 +325,15 @@ func TestSetCellHyperLink(t *testing.T) {
|
|
|
xlsx.SetCellHyperLink("Sheet2", "C1", "https://github.com/360EntSecGroup-Skylar/excelize", "External")
|
|
xlsx.SetCellHyperLink("Sheet2", "C1", "https://github.com/360EntSecGroup-Skylar/excelize", "External")
|
|
|
// Test add Location hyperlink in a work sheet.
|
|
// Test add Location hyperlink in a work sheet.
|
|
|
xlsx.SetCellHyperLink("Sheet2", "D6", "Sheet1!D8", "Location")
|
|
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")))
|
|
assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSetCellHyperLink.xlsx")))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -309,9 +343,11 @@ func TestGetCellHyperLink(t *testing.T) {
|
|
|
t.FailNow()
|
|
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)
|
|
t.Log(link, target)
|
|
|
link, target = xlsx.GetCellHyperLink("Sheet2", "D6")
|
|
link, target = xlsx.GetCellHyperLink("Sheet2", "D6")
|
|
|
t.Log(link, target)
|
|
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", "B19", "SUM(Sheet2!D2,Sheet2!D11)")
|
|
|
xlsx.SetCellFormula("Sheet1", "C19", "SUM(Sheet2!D2,Sheet2!D9)")
|
|
xlsx.SetCellFormula("Sheet1", "C19", "SUM(Sheet2!D2,Sheet2!D9)")
|
|
|
|
|
+
|
|
|
// Test set cell formula with illegal rows number.
|
|
// 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")))
|
|
assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSetCellFormula1.xlsx")))
|
|
|
|
|
|
|
|
xlsx, err = OpenFile(filepath.Join("test", "CalcChain.xlsx"))
|
|
xlsx, err = OpenFile(filepath.Join("test", "CalcChain.xlsx"))
|
|
@@ -408,51 +448,39 @@ func TestGetMergeCells(t *testing.T) {
|
|
|
value string
|
|
value string
|
|
|
start string
|
|
start string
|
|
|
end 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"))
|
|
xlsx, err := OpenFile(filepath.Join("test", "MergeCell.xlsx"))
|
|
|
if !assert.NoError(t, err) {
|
|
if !assert.NoError(t, err) {
|
|
|
t.FailNow()
|
|
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 {
|
|
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)
|
|
xlsx.SetCellStyle("Sheet1", "A22", "A22", style)
|
|
|
|
|
+
|
|
|
// Test set cell style with given illegal rows number.
|
|
// 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.
|
|
// 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")))
|
|
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")
|
|
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.
|
|
// Try to get picture from a worksheet that doesn't contain any images.
|
|
|
file, raw = xlsx.GetPicture("Sheet3", "I9")
|
|
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.
|
|
// Try to get picture from a cell that doesn't contain an image.
|
|
|
file, raw = xlsx.GetPicture("Sheet2", "A2")
|
|
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("xl/worksheets/_rels/sheet1.xml.rels", "rId8")
|
|
|
xlsx.getDrawingRelationships("", "")
|
|
xlsx.getDrawingRelationships("", "")
|
|
|
xlsx.getSheetRelationshipsTargetByID("", "")
|
|
xlsx.getSheetRelationshipsTargetByID("", "")
|
|
|
xlsx.deleteSheetRelationships("", "")
|
|
xlsx.deleteSheetRelationships("", "")
|
|
|
|
|
|
|
|
// Try to get picture from a local storage file.
|
|
// 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"))
|
|
xlsx, err = OpenFile(filepath.Join("test", "TestGetPicture.xlsx"))
|
|
|
if !assert.NoError(t, err) {
|
|
if !assert.NoError(t, err) {
|
|
|
t.FailNow()
|
|
t.FailNow()
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
file, raw = xlsx.GetPicture("Sheet1", "F21")
|
|
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.
|
|
// Try to get picture from a local storage file that doesn't contain an image.
|
|
|
file, raw = xlsx.GetPicture("Sheet1", "F22")
|
|
file, raw = xlsx.GetPicture("Sheet1", "F22")
|
|
|
- t.Log(file, len(raw))
|
|
|
|
|
|
|
+ assert.Empty(t, file)
|
|
|
|
|
+ assert.Empty(t, raw)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestSheetVisibility(t *testing.T) {
|
|
func TestSheetVisibility(t *testing.T) {
|
|
@@ -838,21 +877,6 @@ func TestSheetVisibility(t *testing.T) {
|
|
|
assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSheetVisibility.xlsx")))
|
|
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) {
|
|
func TestColumnVisibility(t *testing.T) {
|
|
|
t.Run("TestBook1", func(t *testing.T) {
|
|
t.Run("TestBook1", func(t *testing.T) {
|
|
|
xlsx, err := prepareTestBook1()
|
|
xlsx, err := prepareTestBook1()
|
|
@@ -1065,38 +1089,37 @@ func TestAddChart(t *testing.T) {
|
|
|
|
|
|
|
|
func TestInsertCol(t *testing.T) {
|
|
func TestInsertCol(t *testing.T) {
|
|
|
xlsx := NewFile()
|
|
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) {
|
|
if !assert.NoError(t, err) {
|
|
|
t.FailNow()
|
|
t.FailNow()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- xlsx.InsertCol("Sheet1", "A")
|
|
|
|
|
|
|
+ xlsx.InsertCol(sheet1, "A")
|
|
|
|
|
|
|
|
assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestInsertCol.xlsx")))
|
|
assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestInsertCol.xlsx")))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestRemoveCol(t *testing.T) {
|
|
func TestRemoveCol(t *testing.T) {
|
|
|
xlsx := NewFile()
|
|
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")))
|
|
assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestRemoveCol.xlsx")))
|
|
|
}
|
|
}
|
|
@@ -1117,11 +1140,10 @@ func TestSetPane(t *testing.T) {
|
|
|
|
|
|
|
|
func TestConditionalFormat(t *testing.T) {
|
|
func TestConditionalFormat(t *testing.T) {
|
|
|
xlsx := NewFile()
|
|
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 format1, format2, format3 int
|
|
|
var err error
|
|
var err error
|
|
|
// Rose format for bad conditional.
|
|
// Rose format for bad conditional.
|
|
@@ -1143,31 +1165,31 @@ func TestConditionalFormat(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Color scales: 2 color.
|
|
// 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.
|
|
// 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...
|
|
// 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...
|
|
// 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...
|
|
// 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...
|
|
// 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...
|
|
// 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%.
|
|
// 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...
|
|
// 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...
|
|
// 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.
|
|
// 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.
|
|
// 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
|
|
// 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"))
|
|
err = xlsx.SaveAs(filepath.Join("test", "TestConditionalFormat.xlsx"))
|
|
|
if !assert.NoError(t, err) {
|
|
if !assert.NoError(t, err) {
|
|
@@ -1175,9 +1197,9 @@ func TestConditionalFormat(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Set conditional format with illegal valid type.
|
|
// 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.
|
|
// 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.
|
|
// Set conditional format with file without dxfs element shold not return error.
|
|
|
xlsx, err = OpenFile(filepath.Join("test", "Book1.xlsx"))
|
|
xlsx, err = OpenFile(filepath.Join("test", "Book1.xlsx"))
|
|
@@ -1193,11 +1215,9 @@ func TestConditionalFormat(t *testing.T) {
|
|
|
|
|
|
|
|
func TestConditionalFormatError(t *testing.T) {
|
|
func TestConditionalFormatError(t *testing.T) {
|
|
|
xlsx := NewFile()
|
|
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
|
|
// Set conditional format with illegal JSON string should return error
|
|
|
_, err := xlsx.NewConditionalStyle("")
|
|
_, 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) {
|
|
func TestSharedStrings(t *testing.T) {
|
|
|
xlsx, err := OpenFile(filepath.Join("test", "SharedStrings.xlsx"))
|
|
xlsx, err := OpenFile(filepath.Join("test", "SharedStrings.xlsx"))
|
|
|
if !assert.NoError(t, err) {
|
|
if !assert.NoError(t, err) {
|
|
@@ -1229,10 +1240,19 @@ func TestSetSheetRow(t *testing.T) {
|
|
|
t.FailNow()
|
|
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")))
|
|
assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestSetSheetRow.xlsx")))
|
|
|
}
|
|
}
|
|
@@ -1245,10 +1265,17 @@ func TestOutlineLevel(t *testing.T) {
|
|
|
xlsx.GetColOutlineLevel("Shee2", "A")
|
|
xlsx.GetColOutlineLevel("Shee2", "A")
|
|
|
xlsx.SetColWidth("Sheet2", "A", "D", 13)
|
|
xlsx.SetColWidth("Sheet2", "A", "D", 13)
|
|
|
xlsx.SetColOutlineLevel("Sheet2", "B", 2)
|
|
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"))
|
|
err := xlsx.SaveAs(filepath.Join("test", "TestOutlineLevel.xlsx"))
|
|
|
if !assert.NoError(t, err) {
|
|
if !assert.NoError(t, err) {
|
|
|
t.FailNow()
|
|
t.FailNow()
|
|
@@ -1258,7 +1285,6 @@ func TestOutlineLevel(t *testing.T) {
|
|
|
if !assert.NoError(t, err) {
|
|
if !assert.NoError(t, err) {
|
|
|
t.FailNow()
|
|
t.FailNow()
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
xlsx.SetColOutlineLevel("Sheet2", "B", 2)
|
|
xlsx.SetColOutlineLevel("Sheet2", "B", 2)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1388,3 +1414,12 @@ func prepareTestBook4() (*File, error) {
|
|
|
|
|
|
|
|
return xlsx, nil
|
|
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)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|