При работе с буфером обмена из C# выяснилось, что вставить туда HTML так, чтобы программы типа Word распознавали его не как текст, а именно как HTML не совсем просто, под катом пример.


Собственно, для вставки HTML в буфер, его нужно специальным образом подготовить. Вот таким методом:

public static string PrepareHtmlToClippboard(stringhtml)
{
    Encoding enc = Encoding.UTF8;
    string begin = «Version:0.9rnStartHTML:{0:000000}rnEndHTML:{1:000000}»
        + «rnStartFragment:{2:000000}rnEndFragment:{3:000000}rn»;
    string html_begin = «rnrn»
        + «
        + » content=»text/html; charset=» + enc.WebName + «»>rn»
        + «HTML clipboardrn

rnrn»

        + ««;
    string html_end = «rn

rnrn»;

    string begin_sample = String.Format(begin, 0, 0, 0, 0);
    intcount_begin = enc.GetByteCount(begin_sample);
    intcount_html_begin = enc.GetByteCount(html_begin);
    intcount_html = enc.GetByteCount(html);
    intcount_html_end = enc.GetByteCount(html_end);
    string html_total = String.Format(
        begin
        , count_begin
        , count_begin + count_html_begin + count_html + count_html_end
        , count_begin + count_html_begin
        , count_begin + count_html_begin + count_html
        ) + html_begin + html + html_end;
    return html_total;

}

Ну и вот так это можно использовать:

DataObject dataObj = new DataObject();
dataObj.SetData(DataFormats.Html, PrepareHtmlToClippboard(«здесь HTML»));
dataObj.SetData(DataFormats.Text, «здесь текст, если приемник не понимает html»);

Clipboard.SetDataObject(dataObj, true);

Собственно все.