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.
Import OpenXmlPowerTools from Nuget and use it.
using OpenXmlPowerTools;
The method needed is OpenXmlPowerTools.UriFixer.FixInvalidUri, or you could copy the UriFixer class from the link.
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/");
}
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
            UriFixer.FixInvalidUri(fs, brokenUri => FixUri(brokenUri));
        }
        using (wDoc = WordprocessingDocument.Open(newFileName, true))
        {
            //Do something without error
        }
    }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With