使用OpenXML从excel文件中删除所有超链接

时间:2017-12-29 06:01:47

标签: c# excel openxml

我的数据源是一个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();
            }

如何修改它以枚举所有链接并循环它们?任何指针都将非常感谢!

1 个答案:

答案 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。但是没有被问到问题的一部分,并且在单元格具有更多样式而不仅仅是超链接颜色(即表格行交替颜色,高光等)的情况下更难做到。