Добавление HTML-текста в Word с помощью Interop - PullRequest
4 голосов
/ 02 марта 2010

Я пытаюсь добавить текст в формате HTML в Word, используя Office Interop Мой код выглядит так:

Clipboard.SetText(notes, TextDataFormat.Html);
pgCriteria.Range.Paste();

но выдает исключение Command Failed. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 15 января 2016

Это сработало для меня в Windows 7 и Word 2007:

public static void pasteHTML(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(); }

Пример использования: range.pasteHTML("a<b>b</b>c");

Возможно, более надежный способ без использования буфера обмена - сохранить фрагмент HTML в файл и использовать InsertFile. Что-то вроде:

public static void insertHTML(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); }
3 голосов
/ 02 марта 2010

Потратив несколько часов, вы должны использовать этот класс http://blogs.msdn.com/jmstall/pages/sample-code-html-clipboard.aspx

0 голосов
/ 26 февраля 2017

Просто создайте временный html-файл с вашим html-содержимым и вставьте его, как показано ниже.

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

// 2- Write temporary html file
var 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);
...