Skip to content Skip to sidebar Skip to footer

Adding Html Text To Word Using Interop

I'm trying to add some HTML formatted text to Word using Office Interop. My code looks like this: Clipboard.SetText(notes, TextDataFormat.Html); pgCriteria.Range.Paste(); but it's

Solution 1:

After spending several hours the solutions is to use this excellent class http://blogs.msdn.com/jmstall/pages/sample-code-html-clipboard.aspx

Solution 2:

This worked for me on Windows 7 and Word 2007:

publicstaticvoidpasteHTML(this Range range, string html)
{
    Clipboard.SetData(
      "HTML Format",
      string.Format("Version:0.9\nStartHTML:80\nEndHTML:{0,8}\nStart" + "Fragment:80\nEndFragment:{0,8}\n", 80 + html.Length) + html + "<");
      range.Paste();
}

Sample use: range.pasteHTML("a<b>b</b>c");

Probably a bit more reliable way without using the clipboard is to save the HTML fragment in a file and use InsertFile. Something like:

publicstaticvoidinsertHTML(this Range range, string html) {
    string path = System.IO.Path.GetTempFileName();
    System.IO.File.WriteAllText(path, "<html>" + html); // must start with certain tag to be detected as html: <html> or <body> or <table> ...
    range.InsertFile(path, ConfirmConversions: false);
    System.IO.File.Delete(path); }

Solution 3:

It is kind of tricky to add the html in a word document. The best way is creating a temporary file and than insert this file to selected range of the word. The trick is to leverage the InsertFile function of the Range. This allows us to insert arbitrary HTML strings by first saving them as files to a temporary location on disk.

The only trick is that < html/> must be the root element of the document.

I use something like this at one of my project.

privatestaticstring HtmlHeader => "<html lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><meta charset='utf-8' /></ head >{0}</html>";
   publicstaticstringGenerateTemporaryHtmlFile(Range range,string htmlContent)
    {
        string path = Path.GetTempFileName();
        File.WriteAllText(path, string.Format(HtmlHeader , htmlContent));
        range.InsertFile(FileName: tmpFilePath, ConfirmConversions: false);
        return path;
    }

it is important to adding

charset='utf-8'

to head of html file other wise you may see unexpected characters at your word document after you insert file.

Solution 4:

Just build a temporary html file with your html content and insert it like below.

// 1- Sample HTML Textvar Html = @"<h1>Sample Title</h1><p>Lorem ipsum dolor <b>his sonet</b> simul</p>";

// 2- Write temporary html filevar HtmlTempPath = Path.Combine(Path.GetTempPath(), $"{Path.GetRandomFileName()}.html");
File.WriteAllText(HtmlTempPath, $"<html>{Html}</html>");

// 3- Insert html file to word
ContentControl ContentCtrl = Document.ContentControls.Add(WdContentControlType.wdContentControlRichText, Missing);
ContentCtrl.Range.InsertFile(HtmlTempPath, ref Missing, ref Missing, ref Missing, ref Missing);

Post a Comment for "Adding Html Text To Word Using Interop"