summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cell.go36
-rw-r--r--excelize_test.go4
-rw-r--r--sheet.go2
-rw-r--r--table.go13
4 files changed, 25 insertions, 30 deletions
diff --git a/cell.go b/cell.go
index 6125583..3ac7441 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 970973a..c01e277 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 870d44b..2f99adf 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 1417cd9..b274c3b 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