I was looking for a way to insert a hyperlink into a Word document I am creating using the Open XML SDK (v2.5). I found a couple of examples on the web and got them to work. The link that was created was clickable but it wasn't styled like a hyperlink. After some trial and error I figured out the issue. Since I was creating the document from scratch it has no styles defined in it. So I created a link in word and copied the hyperlink style.
Here is the example code:
const string outputFilename = @"c:\temp\linked.docx";
using (var wordDocument = WordprocessingDocument.Create(outputFilename, WordprocessingDocumentType.Document)) {
var mainPart = wordDocument.AddMainDocumentPart();
// Create the document structure and add some text.
var doc = mainPart.Document = new Document();
var body = doc.AppendChild(new Body());
// Start a paragraph with some text
var para = body.AppendChild(new Paragraph());
var run = para.AppendChild(new Run());
run.AppendChild(new Text("This is a formatted hyperlink: ") {
Space = SpaceProcessingModeValues.Preserve // Need this so the trailing space is preserved.
});
// Create a hyperlink relationship. Pass the relationship id to the hyperlink below.
var rel = wordDocument.MainDocumentPart.AddHyperlinkRelationship(new Uri("http://www.example.com/"), true);
// Append the hyperlink with formatting.
para.AppendChild(
new Hyperlink(
new Run(
new RunProperties(
// This should be enough if starting with a template
new RunStyle { Val = "Hyperlink", },
// Add these settings to style the link yourself
new Underline { Val = UnderlineValues.Single },
new Color { ThemeColor = ThemeColorValues.Hyperlink }),
new Text { Text = "Click Here"}
)) { History = OnOffValue.FromBoolean(true), Id = rel.Id });
doc.Save();
}