Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/EPPlus/Drawing/ExcelDrawing.cs
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,7 @@ public Uri Hyperlink
DeleteNode(_hyperLinkPath);
if (HypRel != null)
{
_drawings._package.ZipPackage.DeletePart(UriHelper.ResolvePartUri(HypRel.SourceUri, HypRel.TargetUri));
_drawings.Part.DeleteRelationship(HypRel.Id);
}
}

Expand All @@ -546,7 +546,7 @@ public Uri Hyperlink
HypRel = _drawings.Part.CreateRelationship(value, Packaging.TargetMode.External, ExcelPackage.schemaHyperlink);
}
SetXmlNodeString(_hyperLinkPath + "/@r:id", HypRel.Id);
if (Hyperlink is ExcelHyperLink excelLink)
if (value is ExcelHyperLink excelLink)
{
SetXmlNodeString(_hyperLinkPath + "/@tooltip", excelLink.ToolTip);
}
Expand Down
44 changes: 44 additions & 0 deletions src/EPPlusTest/HyperlinkTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,5 +102,49 @@ public void ReadUriWithLocation()
}
}

[TestMethod]
public void DrawingHyperlinkUpdate_ShouldNotThrowException()
{
using (var package = new ExcelPackage())
{
var ws = package.Workbook.Worksheets.Add("Sheet1");

// Add a drawing (shape)
var shape = ws.Drawings.AddShape("MyShape", eShapeStyle.Rect);

// 1. Assign initial external URL hyperlink
var initialUrl = new ExcelHyperLink("https://epplussoftware.com") { ToolTip = "Initial ToolTip" };
shape.Hyperlink = initialUrl;

Assert.IsNotNull(shape.Hyperlink);

// 2. Re-assign to a new external URL hyperlink (this would crash without the fix)
var updatedUrl = new ExcelHyperLink("https://github.com/EPPlusSoftware/EPPlus") { ToolTip = "Updated ToolTip" };
shape.Hyperlink = updatedUrl;

Assert.AreEqual("https://github.com/EPPlusSoftware/EPPlus", shape.Hyperlink.OriginalString);

// 3. Re-assign to an internal sheet reference (this would also crash without the fix)
var internalLink = new ExcelHyperLink("Sheet1!A10", "Go to A10") { ToolTip = "Internal ToolTip" };
shape.Hyperlink = internalLink;

Assert.AreEqual("Sheet1!A10", ((ExcelHyperLink)shape.Hyperlink).ReferenceAddress);

// 4. Save and read back to verify XML and tooltip are correct
package.Save();

using (var readPackage = new ExcelPackage(package.Stream))
{
var readWs = readPackage.Workbook.Worksheets["Sheet1"];
var readShape = readWs.Drawings["MyShape"];

var readLink = (ExcelHyperLink)readShape.Hyperlink;
Assert.IsNotNull(readLink);
Assert.AreEqual("Sheet1!A10", readLink.ReferenceAddress);
Assert.AreEqual("Internal ToolTip", readLink.ToolTip);
}
}
}

}
}
Loading