转自:http://blog.csdn.net/qing2005/article/details/7662707
同事遇到一个难题,就是在现有的Word模板中插入HTML内容,无论是HTML->Rtf,再插入Word,还是将HTML另存为xx.Doc然后用InsertFile插入都不是很好,格式会发生意外。因为HTML有两种,一种是纯网页标记,还有一种是doc->html,中间有很多微软的样式。
研究了一下C#操作Word的方法后,又Google一下怎么在指定书签位置插入内容的方法,后面就是核心的操作问题了。
思路是:
1.在文本框中输入html内容;
2.将html内容转换到WebBrowser上显示;
3.将WebBrowser上的内容复制到剪贴板;
4.打开Word模板,找到指定的书签,然后插入剪贴板内容。
还是利用以前VB的经验,先在Word中创建一个宏,然后复制和粘贴内容,然后查看宏代码:
- Sub 宏1()
-
-
-
-
- Selection.PasteAndFormat (wdFormatOriginalFormatting)
- End Sub
关键代码有了,就是PasteAndFormat,参数也可以知道了,是wdFormatOriginalFormatting类型。
然后创建一个C#工程:
- object docFileName = Application.StartupPath + "\\Sample.docx";
- object missing = Type.Missing;
-
-
-
-
-
-
- private void tsbtnConvert_Click(object sender, EventArgs e) {
- wbControl.DocumentText = txtText.Text;
- while (wbControl.DocumentText != txtText.Text) {
- Application.DoEvents();
- }
-
- OpenDocument();
- }
-
-
-
-
- private void OpenDocument() {
- wd.Application docApp = new wd.Application();
-
- docApp.Documents.Open(ref docFileName,
- ref missing, ref missing, ref missing, ref missing, ref missing,
- ref missing, ref missing, ref missing, ref missing, ref missing,
- ref missing, ref missing, ref missing, ref missing, ref missing);
-
- docApp.Visible = true;
-
-
- object bkObj = "content_1";
- if (docApp.ActiveDocument.Bookmarks.Exists("content_1")) {
- docApp.ActiveDocument.Bookmarks.get_Item(ref bkObj).Select();
-
- wbControl.Document.ExecCommand("SelectAll", false, null);
- wbControl.Document.ExecCommand("Copy", false, null);
-
- docApp.Selection.PasteAndFormat(wd.WdRecoveryType.wdFormatOriginalFormatting);
- }
-
- }