Explorar o código

Optimize code, go test and godoc updated.

Ri Xu %!s(int64=8) %!d(string=hai) anos
pai
achega
308776e350
Modificáronse 4 ficheiros con 25 adicións e 30 borrados
  1. 16 20
      cell.go
  2. 4 0
      excelize_test.go
  3. 1 1
      sheet.go
  4. 4 9
      table.go

+ 16 - 20
cell.go

@@ -215,34 +215,30 @@ func (f *File) SetCellFormula(sheet, axis, formula string) {
 //    style, _ := xlsx.NewStyle(`{"font":{"color":"#1265BE","underline":"single"}}`)
 //    xlsx.SetCellStyle("Sheet1", "A3", "A3", style)
 //
-// A this is another example for "Location"
+// A this is another example for "Location":
 //
 //    xlsx.SetCellHyperLink("Sheet1", "A3", "Sheet1!A40", "Location")
+//
 func (f *File) SetCellHyperLink(sheet, axis, link, linkType string) {
 	xlsx := f.workSheetReader(sheet)
 	axis = f.mergeCellsParser(xlsx, axis)
-	var hyperlink xlsxHyperlink
+	linkTypes := map[string]xlsxHyperlink{
+		"External": {},
+		"Location": {Location: link},
+	}
+	hyperlink, ok := linkTypes[linkType]
+	if !ok || axis == "" {
+		return
+	}
+	hyperlink.Ref = axis
 	if linkType == "External" {
-		rID := f.addSheetRelationships(sheet, SourceRelationshipHyperLink, link, "External")
-		hyperlink = xlsxHyperlink{
-			Ref: axis,
-			RID: "rId" + strconv.Itoa(rID),
-		}
-	} else if linkType == "Location" {
-		hyperlink = xlsxHyperlink{
-			Ref:      axis,
-			Location: link,
-		}
+		rID := f.addSheetRelationships(sheet, SourceRelationshipHyperLink, link, linkType)
+		hyperlink.RID = "rId" + strconv.Itoa(rID)
 	}
-	if hyperlink.Ref == "" {
-		panic("linkType only support External and Location now")
-	} else if xlsx.Hyperlinks != nil {
-		xlsx.Hyperlinks.Hyperlink = append(xlsx.Hyperlinks.Hyperlink, hyperlink)
-	} else {
-		hyperlinks := xlsxHyperlinks{}
-		hyperlinks.Hyperlink = append(hyperlinks.Hyperlink, hyperlink)
-		xlsx.Hyperlinks = &hyperlinks
+	if xlsx.Hyperlinks == nil {
+		xlsx.Hyperlinks = &xlsxHyperlinks{}
 	}
+	xlsx.Hyperlinks.Hyperlink = append(xlsx.Hyperlinks.Hyperlink, hyperlink)
 }
 
 // MergeCell provides function to merge cells by given coordinate area and sheet

+ 4 - 0
excelize_test.go

@@ -213,6 +213,10 @@ func TestSetCellHyperLink(t *testing.T) {
 	xlsx.SetCellHyperLink("sheet1", "B19", "https://github.com/xuri/excelize", "External")
 	// Test add first hyperlink in a work sheet.
 	xlsx.SetCellHyperLink("sheet2", "C1", "https://github.com/xuri/excelize", "External")
+	// Test add Location hyperlink in a work sheet.
+	xlsx.SetCellHyperLink("sheet2", "D6", "Sheet1!D8", "Location")
+	xlsx.SetCellHyperLink("sheet2", "C3", "Sheet1!D8", "")
+	xlsx.SetCellHyperLink("sheet2", "", "Sheet1!D60", "Location")
 	err = xlsx.Save()
 	if err != nil {
 		t.Log(err)

+ 1 - 1
sheet.go

@@ -547,7 +547,7 @@ func parseFormatPanesSet(formatSet string) *formatPanes {
 //                                    | regions. In that case, this value specifies the right
 //                                    | pane.
 //
-//  Pane state type is restricted to the values supported currently listed in the following table:
+// Pane state type is restricted to the values supported currently listed in the following table:
 //
 //     Enumeration Value              | Description
 //    --------------------------------+-------------------------------------------------------------

+ 4 - 9
table.go

@@ -88,16 +88,11 @@ func (f *File) addSheetTable(sheet string, rID int) {
 	table := &xlsxTablePart{
 		RID: "rId" + strconv.Itoa(rID),
 	}
-	if xlsx.TableParts != nil {
-		xlsx.TableParts.Count++
-		xlsx.TableParts.TableParts = append(xlsx.TableParts.TableParts, table)
-	} else {
-		xlsx.TableParts = &xlsxTableParts{
-			Count:      1,
-			TableParts: []*xlsxTablePart{table},
-		}
+	if xlsx.TableParts == nil {
+		xlsx.TableParts = &xlsxTableParts{}
 	}
-
+	xlsx.TableParts.Count++
+	xlsx.TableParts.TableParts = append(xlsx.TableParts.TableParts, table)
 }
 
 // addTable provides function to add table by given sheet index, coordinate area