使用 OpenXML 从 excel 文件中删除所有超链接
Remove all hyperlinks from an excel file using OpenXML
我的数据源是一个 excel 文件,其中包含大量 hyperlinks(运行 到 1000s)。我想使用 OpenXML SDK 和 C# 以编程方式删除所有这些。
到目前为止,我的研究主要指向 post 解释如何将 link 添加到 Excel/Word 文件。 this post 中提供的解决方案仅获取文档中的第一个 hyperlink 并将其删除。
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();
}
如何修改它以枚举所有 link 并循环遍历它们?任何指点将不胜感激!
下面的代码适用于工作表,可以放入其中以替换上面的代码。它删除了每个超链接引用关系和超链接集合。
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。但不作为问题的一部分提出,并且在单元格具有比超链接颜色更多的样式(即 Table 行交替颜色、高亮等)的情况下更难做到
我的数据源是一个 excel 文件,其中包含大量 hyperlinks(运行 到 1000s)。我想使用 OpenXML SDK 和 C# 以编程方式删除所有这些。
到目前为止,我的研究主要指向 post 解释如何将 link 添加到 Excel/Word 文件。 this post 中提供的解决方案仅获取文档中的第一个 hyperlink 并将其删除。
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();
}
如何修改它以枚举所有 link 并循环遍历它们?任何指点将不胜感激!
下面的代码适用于工作表,可以放入其中以替换上面的代码。它删除了每个超链接引用关系和超链接集合。
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。但不作为问题的一部分提出,并且在单元格具有比超链接颜色更多的样式(即 Table 行交替颜色、高亮等)的情况下更难做到