无效的超链接:格式错误的URI作为超链接嵌入到文档中

问题描述 投票:6回答:1

我在应用程序中使用OpenXml命名空间。我正在使用它来读取Excel文件中的XML。这对于某些excel文件可以正常工作,但在其他文件上却出现运行时错误,提示

无效的超链接:格式错误的URI作为超链接嵌入到文档中。

我在下一行获得运行时间

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

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

c# openxml excel-addins
1个回答
4
投票

解决方案来自Eric White的blog post

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

    using OpenXmlPowerTools;
    

    功能OpenXmlPowerTools.UriFixer所需,除非您要从链接复制功能。

  2. 添加FixUri()函数以使用新定义的URI处理损坏的URI。

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

  3. 添加代码以打开文档,如果发生异常,它将修复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
                OpenXmlPowerTools.UriFixer.FixInvalidUri(fs, brokenUri => FixUri(brokenUri));
            }
            using (wDoc = WordprocessingDocument.Open(newFileName, true))
            {
                //Do something without error
            }
        }
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.