diff --git a/cell.go b/cell.go index 61255836f7096ed46528a47789a5be436b4a7404..3ac7441f13aec2037c8bdb08e13963a57b3d9ca8 100644 --- a/cell.go +++ b/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 diff --git a/excelize_test.go b/excelize_test.go index 970973a22340560eb3ee94b2da95d2c998b047aa..c01e2779405e7db5b15d2a99602a12c0cf891ed6 100644 --- a/excelize_test.go +++ b/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) diff --git a/sheet.go b/sheet.go index 870d44b2de3b64a176f726a6e38de52536113790..2f99adf5132ec950fee64a17694b3da35e94eff2 100644 --- a/sheet.go +++ b/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 // --------------------------------+------------------------------------------------------------- diff --git a/table.go b/table.go index 1417cd99c58e9746aa1acf43630b12289d3fc95c..b274c3b876a558d0f7624c72f7c2cb872fa9dfbd 100644 --- a/table.go +++ b/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