From b1a8f7b426ee236c3a33f38a3a62adefaf30ab70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E9=A3=9E?= Date: Wed, 9 Oct 2024 09:45:05 +0800 Subject: [PATCH] fix #543 The given key 'rId1' was not present in the dictionary --- src/EPPlus/EPPlus/ExcelWorksheet.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/EPPlus/EPPlus/ExcelWorksheet.cs b/src/EPPlus/EPPlus/ExcelWorksheet.cs index 38eb5c25..bdcbbe63 100644 --- a/src/EPPlus/EPPlus/ExcelWorksheet.cs +++ b/src/EPPlus/EPPlus/ExcelWorksheet.cs @@ -1171,6 +1171,7 @@ private static bool ReadXmlReaderUntil(XmlReader xr, string nodeText, string alt private void LoadHyperLinks(XmlReader xr) { if (!ReadUntil(xr, "hyperlinks", "rowBreaks", "colBreaks")) return; + var rIdCache = new Dictionary(); while (xr.Read()) { if (xr.LocalName == "hyperlink") @@ -1181,7 +1182,10 @@ private void LoadHyperLinks(XmlReader xr) if (xr.GetAttribute("id", ExcelPackage.schemaRelationships) != null) { var rId = xr.GetAttribute("id", ExcelPackage.schemaRelationships); - var uri = Part.GetRelationship(rId).TargetUri; + if (!rIdCache.TryGetValue(rId,out var uri)) + { + uri = Part.GetRelationship(rId).TargetUri; + } if (uri.IsAbsoluteUri) { try @@ -1199,6 +1203,7 @@ private void LoadHyperLinks(XmlReader xr) } hl.RId = rId; Part.DeleteRelationship(rId); //Delete the relationship, it is recreated when we save the package. + rIdCache[rId] = uri; } else if (xr.GetAttribute("location") != null) {