Invalid Hyperlink: Malformed URI is embedded as a

2020-07-06 07:23发布

I'm using the OpenXml namespace in my application. I'm using this to read the XML within an Excel file. This works fine with certain excel files but on others I get a run time error saying

Invalid Hyperlink: Malformed URI is embedded as a hyperlink in the document.

I get the run time on the following line

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

I'm not sure why it works for some Excel files and doesn't work on others.

1条回答
SAY GOODBYE
2楼-- · 2020-07-06 08:05

Solution is from Eric White's blog post.

  1. Import OpenXmlPowerTools from Nuget and use it.

    using OpenXmlPowerTools;
    

    This is needed for the function OpenXmlPowerTools.UriFixer, unless you want to copy the function from the link.


  2. Add the FixUri() Function to handle the broken URI's with a new defined URI.

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


  3. Add code to open the document, if the exception occurs it fixes the URI's and re-opens the fixed document.

    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
            }
        }
    }
    
查看更多
登录 后发表回答