Browse Source

Merge branch 'master' into lunny/refactor

xuri 7 years ago
parent
commit
d04be7b33d
5 changed files with 129 additions and 75 deletions
  1. 76 25
      excelize_test.go
  2. 1 8
      rows.go
  3. 0 42
      rows_test.go
  4. 13 0
      sheetview.go
  5. 39 0
      sheetview_test.go

+ 76 - 25
excelize_test.go

@@ -6,6 +6,7 @@ import (
 	_ "image/jpeg"
 	_ "image/png"
 	"io/ioutil"
+	"reflect"
 	"strconv"
 	"strings"
 	"testing"
@@ -16,7 +17,7 @@ func TestOpenFile(t *testing.T) {
 	// Test update a XLSX file.
 	xlsx, err := OpenFile("./test/Book1.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	// Test get all the rows in a not exists worksheet.
 	rows := xlsx.GetRows("Sheet4")
@@ -130,17 +131,17 @@ func TestOpenFile(t *testing.T) {
 func TestAddPicture(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book1.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	// Test add picture to worksheet with offset and location hyperlink.
 	err = xlsx.AddPicture("Sheet2", "I9", "./test/images/excel.jpg", `{"x_offset": 140, "y_offset": 120, "hyperlink": "#Sheet2!D8", "hyperlink_type": "Location"}`)
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	// Test add picture to worksheet with offset, external hyperlink and positioning.
 	err = xlsx.AddPicture("Sheet1", "F21", "./test/images/excel.png", `{"x_offset": 10, "y_offset": 10, "hyperlink": "https://github.com/360EntSecGroup-Skylar/excelize", "hyperlink_type": "External", "positioning": "oneCell"}`)
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	// Test add picture to worksheet with invalid file path.
 	err = xlsx.AddPicture("Sheet1", "G21", "./test/images/excel.icon", "")
@@ -155,7 +156,7 @@ func TestAddPicture(t *testing.T) {
 	// Test write file to given path.
 	err = xlsx.SaveAs("./test/Book2.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 }
 
@@ -199,15 +200,15 @@ func TestNewFile(t *testing.T) {
 	// Test add picture to sheet with scaling and positioning.
 	err := xlsx.AddPicture("Sheet1", "H2", "./test/images/excel.gif", `{"x_scale": 0.5, "y_scale": 0.5, "positioning": "absolute"}`)
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	err = xlsx.AddPicture("Sheet1", "C2", "./test/images/excel.png", "")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	err = xlsx.SaveAs("./test/Book3.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 }
 
@@ -219,7 +220,7 @@ func TestColWidth(t *testing.T) {
 	xlsx.GetColWidth("Sheet1", "C")
 	err := xlsx.SaveAs("./test/Book4.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	convertRowHeightToPixels(0)
 }
@@ -232,7 +233,7 @@ func TestRowHeight(t *testing.T) {
 	t.Log(xlsx.GetRowHeight("Sheet1", 0))
 	err := xlsx.SaveAs("./test/Book5.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	convertColWidthToPixels(0)
 }
@@ -252,14 +253,14 @@ func TestSetCellHyperLink(t *testing.T) {
 	xlsx.SetCellHyperLink("Sheet2", "", "Sheet1!D60", "Location")
 	err = xlsx.Save()
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 }
 
 func TestGetCellHyperLink(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book1.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	link, target := xlsx.GetCellHyperLink("Sheet1", "")
 	t.Log(link, target)
@@ -274,7 +275,7 @@ func TestGetCellHyperLink(t *testing.T) {
 func TestSetCellFormula(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book1.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	xlsx.SetCellFormula("Sheet1", "B19", "SUM(Sheet2!D2,Sheet2!D11)")
 	xlsx.SetCellFormula("Sheet1", "C19", "SUM(Sheet2!D2,Sheet2!D9)")
@@ -282,14 +283,14 @@ func TestSetCellFormula(t *testing.T) {
 	xlsx.SetCellFormula("Sheet1", "C", "SUM(Sheet2!D2,Sheet2!D9)")
 	err = xlsx.Save()
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 }
 
 func TestSetSheetBackground(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book1.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	err = xlsx.SetSheetBackground("Sheet2", "./test/images/background.png")
 	if err != nil {
@@ -301,22 +302,22 @@ func TestSetSheetBackground(t *testing.T) {
 	}
 	err = xlsx.SetSheetBackground("Sheet2", "./test/images/background.jpg")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	err = xlsx.SetSheetBackground("Sheet2", "./test/images/background.jpg")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	err = xlsx.Save()
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 }
 
 func TestMergeCell(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book1.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	xlsx.MergeCell("Sheet1", "D9", "D9")
 	xlsx.MergeCell("Sheet1", "D9", "E9")
@@ -336,19 +337,19 @@ func TestMergeCell(t *testing.T) {
 	xlsx.GetCellFormula("Sheet1", "G12")
 	err = xlsx.Save()
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 }
 
 func TestSetCellStyleAlignment(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book2.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	var style int
 	style, err = xlsx.NewStyle(`{"alignment":{"horizontal":"center","ident":1,"justify_last_line":true,"reading_order":0,"relative_indent":1,"shrink_to_fit":true,"text_rotation":45,"vertical":"top","wrap_text":true}}`)
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	xlsx.SetCellStyle("Sheet1", "A22", "A22", style)
 	// Test set cell style with given illegal rows number.
@@ -358,14 +359,14 @@ func TestSetCellStyleAlignment(t *testing.T) {
 	xlsx.GetCellStyle("Sheet1", "A")
 	err = xlsx.Save()
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 }
 
 func TestSetCellStyleBorder(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book2.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	var style int
 	// Test set border with invalid style parameter.
@@ -835,7 +836,7 @@ func TestAutoFilter(t *testing.T) {
 func TestAddChart(t *testing.T) {
 	xlsx, err := OpenFile("./test/Book1.xlsx")
 	if err != nil {
-		t.Log(err)
+		t.Error(err)
 	}
 	categories := map[string]string{"A30": "Small", "A31": "Normal", "A32": "Large", "B29": "Apple", "C29": "Orange", "D29": "Pear"}
 	values := map[string]int{"B30": 2, "C30": 3, "D30": 3, "B31": 5, "C31": 2, "D31": 4, "B32": 6, "C32": 7, "D32": 8}
@@ -1062,3 +1063,53 @@ func TestSetSheetRow(t *testing.T) {
 		return
 	}
 }
+
+func TestRows(t *testing.T) {
+	xlsx, err := OpenFile("./test/Book1.xlsx")
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	rows, err := xlsx.Rows("Sheet2")
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	rowStrs := make([][]string, 0)
+	var i = 0
+	for rows.Next() {
+		i++
+		columns := rows.Columns()
+		rowStrs = append(rowStrs, columns)
+	}
+	if rows.Error() != nil {
+		t.Error(rows.Error())
+		return
+	}
+	dstRows := xlsx.GetRows("Sheet2")
+	if len(dstRows) != len(rowStrs) {
+		t.Error("values not equal")
+		return
+	}
+	for i := 0; i < len(rowStrs); i++ {
+		if !reflect.DeepEqual(trimSliceSpace(dstRows[i]), trimSliceSpace(rowStrs[i])) {
+			t.Error("values not equal")
+			return
+		}
+	}
+	rows, err = xlsx.Rows("SheetN")
+	if err != nil {
+		t.Log(err)
+	}
+}
+
+func trimSliceSpace(s []string) []string {
+	for {
+		if len(s) > 0 && s[len(s)-1] == "" {
+			s = s[:len(s)-1]
+		} else {
+			break
+		}
+	}
+	return s
+}

+ 1 - 8
rows.go

@@ -108,11 +108,9 @@ func (rows *Rows) Columns() []string {
 	if rows.token == nil {
 		return []string{}
 	}
-
 	startElement := rows.token.(xml.StartElement)
 	r := xlsxRow{}
 	rows.decoder.DecodeElement(&r, &startElement)
-
 	d := rows.f.sharedStringsReader()
 	row := make([]string, len(r.C), len(r.C))
 	for _, colCell := range r.C {
@@ -135,7 +133,6 @@ func (err ErrSheetNotExist) Error() string {
 // Rows return a rows iterator. For example:
 //
 //    rows, err := xlsx.GetRows("Sheet1")
-//
 //    for rows.Next() {
 //        for _, colCell := range rows.Columns() {
 //            fmt.Print(colCell, "\t")
@@ -150,13 +147,9 @@ func (f *File) Rows(sheet string) (*Rows, error) {
 		return nil, ErrSheetNotExist{sheet}
 	}
 	if xlsx != nil {
-		output, err := xml.Marshal(f.Sheet[name])
-		if err != nil {
-			return nil, err
-		}
+		output, _ := xml.Marshal(f.Sheet[name])
 		f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpaceBytes(output))
 	}
-
 	return &Rows{
 		f:       f,
 		decoder: xml.NewDecoder(bytes.NewReader(f.readXML(name))),

+ 0 - 42
rows_test.go

@@ -1,42 +0,0 @@
-package excelize
-
-import (
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func trimSliceSpace(s []string) []string {
-	for {
-		if len(s) > 0 && s[len(s)-1] == "" {
-			s = s[:len(s)-1]
-		} else {
-			break
-		}
-	}
-	return s
-}
-
-func TestRows(t *testing.T) {
-	xlsx, err := OpenFile("./test/Book1.xlsx")
-	assert.NoError(t, err)
-
-	rows, err := xlsx.Rows("Sheet2")
-	assert.NoError(t, err)
-
-	rowStrs := make([][]string, 0)
-	var i = 0
-	for rows.Next() {
-		i++
-		columns := rows.Columns()
-		//fmt.Println(i, columns)
-		rowStrs = append(rowStrs, columns)
-	}
-	assert.NoError(t, rows.Error())
-
-	dstRows := xlsx.GetRows("Sheet2")
-	assert.EqualValues(t, len(dstRows), len(rowStrs))
-	for i := 0; i < len(rowStrs); i++ {
-		assert.EqualValues(t, trimSliceSpace(dstRows[i]), trimSliceSpace(rowStrs[i]))
-	}
-}

+ 13 - 0
sheetview.go

@@ -24,6 +24,8 @@ type (
 	ShowGridLines bool
 	// ShowRowColHeaders is a SheetViewOption.
 	ShowRowColHeaders bool
+	// ZoomScale is a SheetViewOption.
+	ZoomScale float64
 	/* TODO
 	// ShowWhiteSpace is a SheetViewOption.
 	ShowWhiteSpace bool
@@ -76,6 +78,17 @@ func (o *ShowRowColHeaders) getSheetViewOption(view *xlsxSheetView) {
 	*o = ShowRowColHeaders(defaultTrue(view.ShowRowColHeaders)) // Excel default: true
 }
 
+func (o ZoomScale) setSheetViewOption(view *xlsxSheetView) {
+	//This attribute is restricted to values ranging from 10 to 400.
+	if float64(o) >= 10 && float64(o) <= 400 {
+		view.ZoomScale = float64(o)
+	}
+}
+
+func (o *ZoomScale) getSheetViewOption(view *xlsxSheetView) {
+	*o = ZoomScale(view.ZoomScale)
+}
+
 // getSheetView returns the SheetView object
 func (f *File) getSheetView(sheetName string, viewIndex int) (*xlsxSheetView, error) {
 	xlsx := f.workSheetReader(sheetName)

+ 39 - 0
sheetview_test.go

@@ -39,10 +39,45 @@ func ExampleFile_SetSheetViewOptions() {
 		excelize.ShowFormulas(true),
 		excelize.ShowGridLines(true),
 		excelize.ShowRowColHeaders(true),
+		excelize.ZoomScale(80),
 	); err != nil {
 		panic(err)
 	}
+
+	var zoomScale excelize.ZoomScale
+	fmt.Println("Default:")
+	fmt.Println("- zoomScale: 80")
+
+	if err := xl.SetSheetViewOptions(sheet, 0, excelize.ZoomScale(500)); err != nil {
+		panic(err)
+	}
+
+	if err := xl.GetSheetViewOptions(sheet, 0, &zoomScale); err != nil {
+		panic(err)
+	}
+
+	fmt.Println("Used out of range value:")
+	fmt.Println("- zoomScale:", zoomScale)
+
+	if err := xl.SetSheetViewOptions(sheet, 0, excelize.ZoomScale(123)); err != nil {
+		panic(err)
+	}
+
+	if err := xl.GetSheetViewOptions(sheet, 0, &zoomScale); err != nil {
+		panic(err)
+	}
+
+	fmt.Println("Used correct value:")
+	fmt.Println("- zoomScale:", zoomScale)
+
 	// Output:
+	// Default:
+	// - zoomScale: 80
+	// Used out of range value:
+	// - zoomScale: 80
+	// Used correct value:
+	// - zoomScale: 123
+
 }
 
 func ExampleFile_GetSheetViewOptions() {
@@ -55,6 +90,7 @@ func ExampleFile_GetSheetViewOptions() {
 		showFormulas      excelize.ShowFormulas
 		showGridLines     excelize.ShowGridLines
 		showRowColHeaders excelize.ShowRowColHeaders
+		zoomScale         excelize.ZoomScale
 	)
 
 	if err := xl.GetSheetViewOptions(sheet, 0,
@@ -63,6 +99,7 @@ func ExampleFile_GetSheetViewOptions() {
 		&showFormulas,
 		&showGridLines,
 		&showRowColHeaders,
+		&zoomScale,
 	); err != nil {
 		panic(err)
 	}
@@ -73,6 +110,7 @@ func ExampleFile_GetSheetViewOptions() {
 	fmt.Println("- showFormulas:", showFormulas)
 	fmt.Println("- showGridLines:", showGridLines)
 	fmt.Println("- showRowColHeaders:", showRowColHeaders)
+	fmt.Println("- zoomScale:", zoomScale)
 
 	if err := xl.SetSheetViewOptions(sheet, 0, excelize.ShowGridLines(false)); err != nil {
 		panic(err)
@@ -92,6 +130,7 @@ func ExampleFile_GetSheetViewOptions() {
 	// - showFormulas: false
 	// - showGridLines: true
 	// - showRowColHeaders: true
+	// - zoomScale: 0
 	// After change:
 	// - showGridLines: false
 }