我的数据源是一个excel文件,其中包含许多超链接(运行到1000s)。我想使用OpenXML SDK和C#以编程方式删除所有这些。
到目前为止,我的研究主要指向了解释如何添加Excel / Word文件链接的帖子。 this帖子中提供的解决方案只获取文档中的第一个超链接并将其删除。
var hyperLinks = worksheetPart.Worksheet.Descendants<Hyperlinks>().First();
var hyperRel = worksheetPart.HyperlinkRelationships;
foreach (Hyperlink item in hyperLinks)
{
if(hyperRel.First().Id == item.Id)
{
worksheetPart.DeleteReferenceRelationship(item.Id.ToString());
item.Remove();
}
if (hyperLinks.Count() == 0)
hyperLinks.Remove();
}
如何修改它以枚举所有链接并循环它们?任何指针都将非常感谢!
答案 0 :(得分:0)
下面的代码适用于工作表,可以放入以替换上面的代码。它删除每个超链接引用关系和超链接集合。
var hyperLinkCollection = worksheetPart.Worksheet.Descendants<Hyperlinks>().First();
if (hyperLinkCollection.Any())
{
var hyperLinks = hyperLinkCollection.Descendants<Hyperlink>();
foreach (var hyperLink in hyperLinks)
{
worksheetPart.DeleteReferenceRelationship(hyperLink.Id);
//remove cell style using hyperLink.Reference
}
hyperLinkCollection.Remove();
worksheetPart.Worksheet.Save();
}
注意:我没有编写代码来删除包含超链接的单元格的任何样式。例如,如果包含超链接的单元格使用带蓝色下划线的文本设置样式,则在运行此代码后,此格式将保留。
删除超链接样式将涉及上面注释行的另一种方法,并涉及使用hyperlink reference。但是没有被问到问题的一部分,并且在单元格具有更多样式而不仅仅是超链接颜色(即表格行交替颜色,高光等)的情况下更难做到。