无效的超链接:畸形的URI嵌入文档中的超链接



我正在使用应用程序中的OpenXML名称空间。我正在使用它来读取Excel文件中的XML。这可以与某些Excel文件一起使用,但是在其他文件上,我会收到一个运行的时间错误,说

无效的超链接:畸形的URI被嵌入文档中的超链接。

我在以下行上获得运行时间

using (var spreadsheet = 
      DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(filePathCopy, true))

我不确定为什么它适用于某些Excel文件,并且不适用于其他文件。

解决方案来自埃里克·怀特(Eric White)的博客文章


  1. 从Nuget导入OpenXMlPowerTools并使用它。

    using OpenXmlPowerTools;
    

    所需的方法是OpenXmlPowerTools.UriFixer.FixInvalidUri,或者您可以从链接中复制UriFixer类。


  1. 添加FixUri()方法以使用新定义的URI处理破乌里的方法。

    private static Uri FixUri(string brokenUri)
    {
        return new Uri("http://broken-link/");
    }
    

  1. 添加代码打开文档,如果发生例外情况,它将修复URI并重新打开固定的文档。

    WordprocessingDocument wDoc;
    try
    {
        using (wDoc = WordprocessingDocument.Open(newFileName, true))
        {
            //Try do something
        }
    }
    catch (OpenXmlPackageException e)
    {
        if (e.ToString().Contains("Invalid Hyperlink"))
        {
            using (FileStream fs = new FileStream(newFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                //Fix problematic URI's
                UriFixer.FixInvalidUri(fs, brokenUri => FixUri(brokenUri));
            }
            using (wDoc = WordprocessingDocument.Open(newFileName, true))
            {
                //Do something without error
            }
        }
    }
    

您还可以使用快速VB脚本在Excel中修复Excel工作表:

从Excel表中删除超链接的简便方法:

  • 打开工作表。

  • 按Alt F11打开VB宏观编辑器。

  • 添加下面的VB子,然后保存。如果您不想保存宏 - 因为您可能只这样做一次 - 如果提示提示,请忽略无宏的工作表错误。

  • 关闭,然后转到宏并运行宏。

    sub removehyperlinks()

    '从活动板上删除所有超链接。Activesheet.hyperlinks.delete

    结束子

基于:https://www.youtube.com/watch?time_continue=4& v = w8lyijwigj0&feature=emb_title

最新更新