使用C#将HTML内容写入word文档

时间:2013-06-12 11:24:56

标签: c# ms-word ckeditor

我正在动态生成word文档,需要使用使用CKeditor控件生成的html内容替换我的特殊标记。这里我使用的word文档是一个模板,其中包含预先输入的文本和生成文档,我使用的是Microsoft.Office.Interop.Word。现在我可以使用interop的doc.range.Find方法找到我的特殊标签。但是当我想用HTML内容替换这个标签而不失其风格时。我怎么能这样做? 使用doc.range.Find.replacement.text是不实际的,因为它只是用html文本替换整个标记。

实施例: 在我的word文档中,我有一个特殊的标签,如下所示

 ##<Special Conditions Frag>## 

在文档生成期间,我需要接受来自用户的一些文本,这些文本是通过ckeditor控件输入的(它将是带有body标签的HTML格式和所有文本)。这个html内容我需要用word文档中的上述特殊条件替换frag标签。

我的HTML内容如下所示

<html>
 <head>
  <title></title></head>
   <body>
    <p>
 <strong>Sample text</strong>
    </p>
   </body>
</html>

1 个答案:

答案 0 :(得分:2)

从XML,OOXML到Interop,确实有很多可能的变种。

一种是使用剪贴板来做到这一点。

string html = Clipboard.GetText(TextDataFormat.Html);

你可以操作你的html字符串,同时向剪贴板发送你想要的任何HTML代码。

//save the html content to a file
File.WriteAllText(temporaryFilePath, html);

您可以将其保存在文件中并打开文件,您将在浏览器中看到html代码的真实转换。

如果要立即将其实现到Word中,可以使用以下命令插入该文件内容:

s.Range.InsertFile(temporaryFilePath);

如果您想浏览所有文档,可以使用循环并检查特定的地点替换

foreach (NetOffice.WordApi.InlineShape s in docWord.InlineShapes)
{
    if (s.Type==NetOffice.WordApi.Enums.WdInlineShapeType.wdInlineShapePicture &&   s.AlternativeText.Contains("|"))
    {
        //save the html content to a file
        File.WriteAllText(temporaryFilePath, html);  
        s.Range.InsertFile(temporaryFilePath);             
    }
}

这是将HTML集成到Word中的一种方法。另一种方式,丑陋的方式是将你的HTML代码转换为图片并插入图片,我不建议那个。 如果您打算为Excel扩展它,它的工作方式相同,如果您尝试将html实现到Powerpoint中,它将无法工作,但您可以在2步中完成。首先将您的HTML粘贴到Excel中,选择粘贴的内容并将其粘贴到Powerpoint中,它可以正常工作。如果你粘贴一个表,没有问题,只需要这样做,之后,你编写第二个循环来创建一个新表,而不是你从Excel带到Powerpoint的那个表。

编辑:根据错误 在您的主要内容中,您应该添加:

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

这个问题可以在这里回溯:C# WinForms: How to set Main function STAThreadAttribute