Я наблюдаю очень странное поведение здесь.У меня есть документ Excel (.xlsx), и моя цель - отредактировать все гиперссылки, которые соответствуют определенным критериям.
При первой итерации я могу редактировать большинство ссылок.Есть 4 ссылки, которые все еще остаются.Затем я снова запускаю программу.Теперь 2 остаются.Затем я снова запускаю программу, и, наконец, все ссылки заменяются.
Вот фрагмент:
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(FilePath, true))
{
WorkbookPart wbPart = doc.WorkbookPart;
// Replace hyperlink targets
foreach (var worksheet in wbPart.WorksheetParts)
{
var hyperLinkRelations = worksheet.HyperlinkRelationships;
for (int i = 0; i < hyperLinkRelations.Count(); i++)
{
var link = hyperLinkRelations.ElementAt(i);
try
{
if (link != null && link.Uri != null && Utils.IsToBeReplaced(link.Uri.AbsoluteUri))
{
string relationId = link.Id;
string destUrl = GetReplacementUrl(link.Uri.AbsoluteUri);
if (destUrl != null)
{
worksheet.DeleteReferenceRelationship(link);
worksheet.AddHyperlinkRelationship(new Uri(destUrl, UriKind.Absolute), true, relationId);
}
}
}
catch (Exception ex)
{
Logger.Log(ex);
}
}
}
}
Я проверил служебные методы "IsToBeReplaced ()" и "GetReplacementUrl () "функционируют нормально.Я установил точку останова и обнаружил, что URL-адреса, которые не заменяются, просто не отображаются в коллекции «HyperlinkRelationships».
Вот файл Excel, с которым я работаю: https://app.box.com/s/j3ulbxfafzxgcqiaep148a8yq4iy37ow