使用Interop将Word文本添加到Word

时间:2010-03-02 14:55:23

标签: html ms-word office-interop

我正在尝试使用Office Interop向Word添加一些HTML格式的文本。我的代码如下所示:

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

但它正在抛出命令失败的异常。有什么想法吗?

4 个答案:

答案 0 :(得分:3)

花了几个小时后,解决方案是使用这个优秀的课程 http://blogs.msdn.com/jmstall/pages/sample-code-html-clipboard.aspx

答案 1 :(得分:3)

这适用于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); }

答案 2 :(得分:0)

只需使用您的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);

答案 3 :(得分:0)

在Word文档中添加html有点棘手。最好的方法是创建一个临时文件,然后将此文件插入单词的选定范围。诀窍是利用 Range InsertFile 功能。这样一来,我们就可以通过将任意HTML字符串作为文件保存到磁盘上的临时位置来插入任意HTML字符串。

  

唯一的技巧是 必须是   文档。

我在我的一个项目中使用了类似的东西。

open class CustomEditText : TextInputEditText {
    constructor(context: Context?) : super(context) {
        disableCopyPastMenu()
    }

    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
        disableCopyPastMenu()
    }

    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
        disableCopyPastMenu()
    }
}

添加

很重要
  

charset ='utf-8'

否则,插入文件后,在html文件的开头,您可能会在Word文档中看到意外的字符。