使用 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 行交替颜色、高亮等)的情况下更难做到