瀏覽代碼

Improve code readability.

Ri Xu 8 年之前
父節點
當前提交
905be463ed
共有 8 個文件被更改,包括 161 次插入151 次删除
  1. 2 9
      README.md
  2. 13 17
      cell.go
  3. 46 7
      chart.go
  4. 13 14
      excelize.go
  5. 11 18
      picture.go
  6. 25 27
      rows.go
  7. 18 22
      sheet.go
  8. 33 37
      styles.go

+ 2 - 9
README.md

@@ -30,7 +30,6 @@ package main
 
 import (
     "fmt"
-    "os"
 
     "github.com/xuri/excelize"
 )
@@ -48,7 +47,6 @@ func main() {
     err := xlsx.SaveAs("./Workbook.xlsx")
     if err != nil {
         fmt.Println(err)
-        os.Exit(1)
     }
 }
 ```
@@ -62,7 +60,6 @@ package main
 
 import (
     "fmt"
-    "os"
 
     "github.com/xuri/excelize"
 )
@@ -71,7 +68,7 @@ func main() {
     xlsx, err := excelize.OpenFile("./Workbook.xlsx")
     if err != nil {
         fmt.Println(err)
-        os.Exit(1)
+        return
     }
     // Get value from cell by given worksheet name and axis.
     cell := xlsx.GetCellValue("Sheet1", "B2")
@@ -99,7 +96,6 @@ package main
 
 import (
 	"fmt"
-	"os"
 
 	"github.com/xuri/excelize"
 )
@@ -119,7 +115,6 @@ func main() {
 	err := xlsx.SaveAs("./Workbook.xlsx")
 	if err != nil {
 		fmt.Println(err)
-		os.Exit(1)
 	}
 }
 ```
@@ -131,7 +126,6 @@ package main
 
 import (
     "fmt"
-    "os"
     _ "image/gif"
     _ "image/jpeg"
     _ "image/png"
@@ -143,7 +137,7 @@ func main() {
     xlsx, err := excelize.OpenFile("./Workbook.xlsx")
     if err != nil {
         fmt.Println(err)
-        os.Exit(1)
+        return
     }
     // Insert a picture.
     err = xlsx.AddPicture("Sheet1", "A2", "./image1.png", "")
@@ -164,7 +158,6 @@ func main() {
     err = xlsx.Save()
     if err != nil {
         fmt.Println(err)
-        os.Exit(1)
     }
 }
 ```

+ 13 - 17
cell.go

@@ -92,15 +92,13 @@ func (f *File) GetCellValue(sheet, axis string) string {
 		return ""
 	}
 	for _, v := range xlsx.SheetData.Row {
-		if v.R != row {
-			continue
-		}
-		for _, r := range v.C {
-			if axis != r.R {
-				continue
+		if v.R == row {
+			for _, r := range v.C {
+				if axis == r.R {
+					val, _ := r.getValueFrom(f, f.sharedStringsReader())
+					return val
+				}
 			}
-			val, _ := r.getValueFrom(f, f.sharedStringsReader())
-			return val
 		}
 	}
 	return ""
@@ -164,15 +162,13 @@ func (f *File) GetCellFormula(sheet, axis string) string {
 		return ""
 	}
 	for _, v := range xlsx.SheetData.Row {
-		if v.R != row {
-			continue
-		}
-		for _, f := range v.C {
-			if axis != f.R {
-				continue
-			}
-			if f.F != nil {
-				return f.F.Content
+		if v.R == row {
+			for _, f := range v.C {
+				if axis == f.R {
+					if f.F != nil {
+						return f.F.Content
+					}
+				}
 			}
 		}
 	}

+ 46 - 7
chart.go

@@ -21,11 +21,52 @@ const (
 
 // This section defines the default value of chart properties.
 var (
-	chartView3DRotX         = map[string]int{Bar: 0, Bar3D: 15, Doughnut: 0, Line: 0, Pie: 0, Pie3D: 30, Radar: 0, Scatter: 0}
-	chartView3DRotY         = map[string]int{Bar: 0, Bar3D: 20, Doughnut: 0, Line: 0, Pie: 0, Pie3D: 0, Radar: 0, Scatter: 0}
-	chartView3DDepthPercent = map[string]int{Bar: 100, Bar3D: 100, Doughnut: 100, Line: 100, Pie: 100, Pie3D: 100, Radar: 100, Scatter: 100}
-	chartView3DRAngAx       = map[string]int{Bar: 0, Bar3D: 1, Doughnut: 0, Line: 0, Pie: 0, Pie3D: 0, Radar: 0, Scatter: 0}
-	chartLegendPosition     = map[string]string{"bottom": "b", "left": "l", "right": "r", "top": "t", "top_right": "tr"}
+	chartView3DRotX = map[string]int{
+		Bar:      0,
+		Bar3D:    15,
+		Doughnut: 0,
+		Line:     0,
+		Pie:      0,
+		Pie3D:    30,
+		Radar:    0,
+		Scatter:  0,
+	}
+	chartView3DRotY = map[string]int{
+		Bar:      0,
+		Bar3D:    20,
+		Doughnut: 0,
+		Line:     0,
+		Pie:      0,
+		Pie3D:    0,
+		Radar:    0,
+		Scatter:  0,
+	}
+	chartView3DDepthPercent = map[string]int{
+		Bar:      100,
+		Bar3D:    100,
+		Doughnut: 100,
+		Line:     100,
+		Pie:      100,
+		Pie3D:    100,
+		Radar:    100,
+		Scatter:  100,
+	}
+	chartView3DRAngAx = map[string]int{
+		Bar:      0,
+		Bar3D:    1,
+		Doughnut: 0,
+		Line:     0,
+		Pie:      0,
+		Pie3D:    0,
+		Radar:    0,
+		Scatter:  0}
+	chartLegendPosition = map[string]string{
+		"bottom":    "b",
+		"left":      "l",
+		"right":     "r",
+		"top":       "t",
+		"top_right": "tr",
+	}
 )
 
 // parseFormatChartSet provides function to parse the format settings of the
@@ -63,7 +104,6 @@ func parseFormatChartSet(formatSet string) *formatChart {
 //
 //    import (
 //        "fmt"
-//        "os"
 //
 //        "github.com/xuri/excelize"
 //    )
@@ -83,7 +123,6 @@ func parseFormatChartSet(formatSet string) *formatChart {
 //        err := xlsx.SaveAs("./Workbook.xlsx")
 //        if err != nil {
 //            fmt.Println(err)
-//            os.Exit(1)
 //        }
 //    }
 //

+ 13 - 14
excelize.go

@@ -120,11 +120,11 @@ func checkSheet(xlsx *xlsxWorksheet) {
 		_, ok := existsRows[i+1]
 		if ok {
 			sheetData.Row = append(sheetData.Row, xlsx.SheetData.Row[existsRows[i+1]])
-			continue
+		} else {
+			sheetData.Row = append(sheetData.Row, xlsxRow{
+				R: i + 1,
+			})
 		}
-		sheetData.Row = append(sheetData.Row, xlsxRow{
-			R: i + 1,
-		})
 	}
 	xlsx.SheetData = sheetData
 }
@@ -223,16 +223,15 @@ func (f *File) adjustRowDimensions(xlsx *xlsxWorksheet, rowIndex, offset int) {
 		return
 	}
 	for i, r := range xlsx.SheetData.Row {
-		if r.R < rowIndex {
-			continue
-		}
-		xlsx.SheetData.Row[i].R += offset
-		for k, v := range xlsx.SheetData.Row[i].C {
-			axis := v.R
-			col := string(strings.Map(letterOnlyMapF, axis))
-			row, _ := strconv.Atoi(strings.Map(intOnlyMapF, axis))
-			xAxis := row + offset
-			xlsx.SheetData.Row[i].C[k].R = col + strconv.Itoa(xAxis)
+		if r.R >= rowIndex {
+			xlsx.SheetData.Row[i].R += offset
+			for k, v := range xlsx.SheetData.Row[i].C {
+				axis := v.R
+				col := string(strings.Map(letterOnlyMapF, axis))
+				row, _ := strconv.Atoi(strings.Map(intOnlyMapF, axis))
+				xAxis := row + offset
+				xlsx.SheetData.Row[i].C[k].R = col + strconv.Itoa(xAxis)
+			}
 		}
 	}
 }

+ 11 - 18
picture.go

@@ -38,7 +38,6 @@ func parseFormatPictureSet(formatSet string) *formatPicture {
 //
 //    import (
 //        "fmt"
-//        "os"
 //        _ "image/gif"
 //        _ "image/jpeg"
 //        _ "image/png"
@@ -66,7 +65,6 @@ func parseFormatPictureSet(formatSet string) *formatPicture {
 //        err = xlsx.SaveAs("./Workbook.xlsx")
 //        if err != nil {
 //            fmt.Println(err)
-//            os.Exit(1)
 //        }
 //    }
 //
@@ -135,10 +133,9 @@ func (f *File) deleteSheetRelationships(sheet, rID string) {
 	var sheetRels xlsxWorkbookRels
 	xml.Unmarshal([]byte(f.readXML(rels)), &sheetRels)
 	for k, v := range sheetRels.Relationships {
-		if v.ID != rID {
-			continue
+		if v.ID == rID {
+			sheetRels.Relationships = append(sheetRels.Relationships[:k], sheetRels.Relationships[k+1:]...)
 		}
-		sheetRels.Relationships = append(sheetRels.Relationships[:k], sheetRels.Relationships[k+1:]...)
 	}
 	output, _ := xml.Marshal(sheetRels)
 	f.saveFileList(rels, string(output))
@@ -415,17 +412,14 @@ func (f *File) GetPicture(sheet, cell string) (string, []byte) {
 	for _, anchor := range decodeWsDr.TwoCellAnchor {
 		decodeTwoCellAnchor := decodeTwoCellAnchor{}
 		xml.Unmarshal([]byte("<decodeTwoCellAnchor>"+anchor.Content+"</decodeTwoCellAnchor>"), &decodeTwoCellAnchor)
-		if decodeTwoCellAnchor.From == nil || decodeTwoCellAnchor.Pic == nil {
-			continue
-		}
-		if decodeTwoCellAnchor.From.Col == col && decodeTwoCellAnchor.From.Row == row {
-			xlsxWorkbookRelation := f.getDrawingRelationships(drawingRelationships, decodeTwoCellAnchor.Pic.BlipFill.Blip.Embed)
-			_, ok := supportImageTypes[filepath.Ext(xlsxWorkbookRelation.Target)]
-			if !ok {
-				continue
+		if decodeTwoCellAnchor.From != nil && decodeTwoCellAnchor.Pic != nil {
+			if decodeTwoCellAnchor.From.Col == col && decodeTwoCellAnchor.From.Row == row {
+				xlsxWorkbookRelation := f.getDrawingRelationships(drawingRelationships, decodeTwoCellAnchor.Pic.BlipFill.Blip.Embed)
+				_, ok := supportImageTypes[filepath.Ext(xlsxWorkbookRelation.Target)]
+				if ok {
+					return filepath.Base(xlsxWorkbookRelation.Target), []byte(f.XLSX[strings.Replace(xlsxWorkbookRelation.Target, "..", "xl", -1)])
+				}
 			}
-
-			return filepath.Base(xlsxWorkbookRelation.Target), []byte(f.XLSX[strings.Replace(xlsxWorkbookRelation.Target, "..", "xl", -1)])
 		}
 	}
 	return "", []byte{}
@@ -441,10 +435,9 @@ func (f *File) getDrawingRelationships(rels, rID string) *xlsxWorkbookRelation {
 	var drawingRels xlsxWorkbookRels
 	xml.Unmarshal([]byte(f.readXML(rels)), &drawingRels)
 	for _, v := range drawingRels.Relationships {
-		if v.ID != rID {
-			continue
+		if v.ID == rID {
+			return &v
 		}
-		return &v
 	}
 	return nil
 }

+ 25 - 27
rows.go

@@ -219,12 +219,11 @@ func (f *File) RemoveRow(sheet string, row int) {
 	xlsx := f.workSheetReader(sheet)
 	row++
 	for i, r := range xlsx.SheetData.Row {
-		if r.R != row {
-			continue
+		if r.R == row {
+			xlsx.SheetData.Row = append(xlsx.SheetData.Row[:i], xlsx.SheetData.Row[i+1:]...)
+			f.adjustHelper(sheet, -1, row, -1)
+			return
 		}
-		xlsx.SheetData.Row = append(xlsx.SheetData.Row[:i], xlsx.SheetData.Row[i+1:]...)
-		f.adjustHelper(sheet, -1, row, -1)
-		return
 	}
 }
 
@@ -269,28 +268,27 @@ func checkRow(xlsx *xlsxWorksheet) {
 	buffer := bytes.Buffer{}
 	for k, v := range xlsx.SheetData.Row {
 		lenCol := len(v.C)
-		if lenCol < 1 {
-			continue
-		}
-		endR := string(strings.Map(letterOnlyMapF, v.C[lenCol-1].R))
-		endRow, _ := strconv.Atoi(strings.Map(intOnlyMapF, v.C[lenCol-1].R))
-		endCol := TitleToNumber(endR) + 1
-		if lenCol < endCol {
-			oldRow := xlsx.SheetData.Row[k].C
-			xlsx.SheetData.Row[k].C = xlsx.SheetData.Row[k].C[:0]
-			tmp := []xlsxC{}
-			for i := 0; i <= endCol; i++ {
-				buffer.WriteString(ToAlphaString(i))
-				buffer.WriteString(strconv.Itoa(endRow))
-				tmp = append(tmp, xlsxC{
-					R: buffer.String(),
-				})
-				buffer.Reset()
-			}
-			xlsx.SheetData.Row[k].C = tmp
-			for _, y := range oldRow {
-				colAxis := TitleToNumber(string(strings.Map(letterOnlyMapF, y.R)))
-				xlsx.SheetData.Row[k].C[colAxis] = y
+		if lenCol > 0 {
+			endR := string(strings.Map(letterOnlyMapF, v.C[lenCol-1].R))
+			endRow, _ := strconv.Atoi(strings.Map(intOnlyMapF, v.C[lenCol-1].R))
+			endCol := TitleToNumber(endR) + 1
+			if lenCol < endCol {
+				oldRow := xlsx.SheetData.Row[k].C
+				xlsx.SheetData.Row[k].C = xlsx.SheetData.Row[k].C[:0]
+				tmp := []xlsxC{}
+				for i := 0; i <= endCol; i++ {
+					buffer.WriteString(ToAlphaString(i))
+					buffer.WriteString(strconv.Itoa(endRow))
+					tmp = append(tmp, xlsxC{
+						R: buffer.String(),
+					})
+					buffer.Reset()
+				}
+				xlsx.SheetData.Row[k].C = tmp
+				for _, y := range oldRow {
+					colAxis := TitleToNumber(string(strings.Map(letterOnlyMapF, y.R)))
+					xlsx.SheetData.Row[k].C[colAxis] = y
+				}
 			}
 		}
 	}

+ 18 - 22
sheet.go

@@ -92,10 +92,9 @@ func (f *File) worksheetWriter() {
 func trimCell(column []xlsxC) []xlsxC {
 	col := []xlsxC{}
 	for _, c := range column {
-		if c.S == 0 && c.V == "" && c.F == nil && c.T == "" {
-			continue
+		if c.S != 0 || c.V != "" || c.F != nil || c.T != "" {
+			col = append(col, c)
 		}
-		col = append(col, c)
 	}
 	return col
 }
@@ -374,19 +373,18 @@ func (f *File) SetSheetBackground(sheet, picture string) error {
 func (f *File) DeleteSheet(name string) {
 	content := f.workbookReader()
 	for k, v := range content.Sheets.Sheet {
-		if v.Name != trimSheetName(name) || len(content.Sheets.Sheet) < 2 {
-			continue
+		if v.Name == trimSheetName(name) && len(content.Sheets.Sheet) > 1 {
+			content.Sheets.Sheet = append(content.Sheets.Sheet[:k], content.Sheets.Sheet[k+1:]...)
+			sheet := "xl/worksheets/sheet" + strings.TrimPrefix(v.ID, "rId") + ".xml"
+			rels := "xl/worksheets/_rels/sheet" + strings.TrimPrefix(v.ID, "rId") + ".xml.rels"
+			target := f.deleteSheetFromWorkbookRels(v.ID)
+			f.deleteSheetFromContentTypes(target)
+			delete(f.sheetMap, name)
+			delete(f.XLSX, sheet)
+			delete(f.XLSX, rels)
+			delete(f.Sheet, sheet)
+			f.SheetCount--
 		}
-		content.Sheets.Sheet = append(content.Sheets.Sheet[:k], content.Sheets.Sheet[k+1:]...)
-		sheet := "xl/worksheets/sheet" + strings.TrimPrefix(v.ID, "rId") + ".xml"
-		rels := "xl/worksheets/_rels/sheet" + strings.TrimPrefix(v.ID, "rId") + ".xml.rels"
-		target := f.deleteSheetFromWorkbookRels(v.ID)
-		f.deleteSheetFromContentTypes(target)
-		delete(f.sheetMap, name)
-		delete(f.XLSX, sheet)
-		delete(f.XLSX, rels)
-		delete(f.Sheet, sheet)
-		f.SheetCount--
 	}
 }
 
@@ -396,11 +394,10 @@ func (f *File) DeleteSheet(name string) {
 func (f *File) deleteSheetFromWorkbookRels(rID string) string {
 	content := f.workbookRelsReader()
 	for k, v := range content.Relationships {
-		if v.ID != rID {
-			continue
+		if v.ID == rID {
+			content.Relationships = append(content.Relationships[:k], content.Relationships[k+1:]...)
+			return v.Target
 		}
-		content.Relationships = append(content.Relationships[:k], content.Relationships[k+1:]...)
-		return v.Target
 	}
 	return ""
 }
@@ -410,10 +407,9 @@ func (f *File) deleteSheetFromWorkbookRels(rID string) string {
 func (f *File) deleteSheetFromContentTypes(target string) {
 	content := f.contentTypesReader()
 	for k, v := range content.Overrides {
-		if v.PartName != "/xl/"+target {
-			continue
+		if v.PartName == "/xl/"+target {
+			content.Overrides = append(content.Overrides[:k], content.Overrides[k+1:]...)
 		}
-		content.Overrides = append(content.Overrides[:k], content.Overrides[k+1:]...)
 	}
 }
 

+ 33 - 37
styles.go

@@ -2163,32 +2163,31 @@ func setBorders(formatStyle *formatStyle) *xlsxBorder {
 
 	var border xlsxBorder
 	for _, v := range formatStyle.Border {
-		if v.Style > 13 || v.Style < 0 {
-			continue
-		}
-		var color xlsxColor
-		color.RGB = getPaletteColor(v.Color)
-		switch v.Type {
-		case "left":
-			border.Left.Style = styles[v.Style]
-			border.Left.Color = &color
-		case "right":
-			border.Right.Style = styles[v.Style]
-			border.Right.Color = &color
-		case "top":
-			border.Top.Style = styles[v.Style]
-			border.Top.Color = &color
-		case "bottom":
-			border.Bottom.Style = styles[v.Style]
-			border.Bottom.Color = &color
-		case "diagonalUp":
-			border.Diagonal.Style = styles[v.Style]
-			border.Diagonal.Color = &color
-			border.DiagonalUp = true
-		case "diagonalDown":
-			border.Diagonal.Style = styles[v.Style]
-			border.Diagonal.Color = &color
-			border.DiagonalDown = true
+		if 0 <= v.Style && v.Style < 14 {
+			var color xlsxColor
+			color.RGB = getPaletteColor(v.Color)
+			switch v.Type {
+			case "left":
+				border.Left.Style = styles[v.Style]
+				border.Left.Color = &color
+			case "right":
+				border.Right.Style = styles[v.Style]
+				border.Right.Color = &color
+			case "top":
+				border.Top.Style = styles[v.Style]
+				border.Top.Color = &color
+			case "bottom":
+				border.Bottom.Style = styles[v.Style]
+				border.Bottom.Color = &color
+			case "diagonalUp":
+				border.Diagonal.Style = styles[v.Style]
+				border.Diagonal.Color = &color
+				border.DiagonalUp = true
+			case "diagonalDown":
+				border.Diagonal.Style = styles[v.Style]
+				border.Diagonal.Color = &color
+				border.DiagonalDown = true
+			}
 		}
 	}
 	return &border
@@ -2555,18 +2554,15 @@ func (f *File) SetConditionalFormat(sheet, area, formatSet string) {
 		var ok bool
 		// "type" is a required parameter, check for valid validation types.
 		vt, ok = validType[v.Type]
-		if !ok {
-			continue
-		}
-		// Check for valid criteria types.
-		ct, ok = criteriaType[v.Criteria]
-		if !ok && vt != "expression" {
-			continue
-		}
-
-		drawfunc, ok := drawContFmtFunc[vt]
 		if ok {
-			cfRule = append(cfRule, drawfunc(p, ct, v))
+			// Check for valid criteria types.
+			ct, ok = criteriaType[v.Criteria]
+			if ok || vt == "expression" {
+				drawfunc, ok := drawContFmtFunc[vt]
+				if ok {
+					cfRule = append(cfRule, drawfunc(p, ct, v))
+				}
+			}
 		}
 	}