2

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

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

 ##<Special Conditions Frag>## 

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

我的 HTML 内容如下所示

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

1 回答 1

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 中,它将无法工作,但您可以分两步完成。首先将您的html粘贴到Excel中,选择粘贴的内容并将其粘贴到Powerpoint中,它可以正常工作。如果您粘贴一个表格,没问题,只需执行此操作,稍后,您将编写第二个循环来创建一个新表格,而不是从 Excel 中获取的那个表格。

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

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

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

于 2013-06-12T11:51:56.837 回答