Microsoft partner of the year icon

 

I know you’ve been thirsty for some code, so here we go.

I was dumfounded at the absence of “working” code samples for injecting a hyperlink using Open XML 2.0 on google and bing.  I don’t consider samples that reference missing sealed constant classes to be “working”…

This one injects a hyperlink at the end of the word doc and will not inject it more than once:

//c:Program Files (x86)Open XML SDKV2.0libDocumentFormat.OpenXml.dll

using DocumentFormat.OpenXml.Packaging;

using DocumentFormat.OpenXml;

using DocumentFormat.OpenXml.Wordprocessing;

using (WordprocessingDocument wdPackage =

WordprocessingDocument.Open(stream, true))

{

    //add the url

    string urlLabel = “Text To Display”;

    System.Uri uri = new Uri(“http://something.urlencoded.org”);

    bool urlExists = false;

  

    foreach (HyperlinkRelationship hRel in wdPackage.MainDocumentPart.HyperlinkRelationships)

    {

        if (hRel.Uri == uri)

        {

            urlExists = true;

            break;

        }

    }

 

    if (!urlExists)

    {

        MainDocumentPart mainPart = wdPackage.MainDocumentPart;

        HyperlinkRelationship rel = mainPart.AddHyperlinkRelationship(uri, true);

        string relationshipId = rel.Id;

        Paragraph newParagraph = new Paragraph(

            new Hyperlink(

                new ProofError() { Type = ProofingErrorValues.GrammarStart },

                new Run(

                    new RunProperties(

                        new RunStyle() { Val = “Hyperlink” }),

                    new Text(urlLabel)

                )) { History = OnOffValue.FromBoolean(true), Id = relationshipId });

 

        Paragraph p = mainPart.Document.Body.Elements<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().Last();

        mainPart.Document.Body.InsertAfter<Paragraph>(newParagraph, p);

        mainPart.Document.Save();

    }

   

 

       wdPackage.Close();

}