且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在C#下利用RichTextBox打开一个有文字格式和图片的Word文档

更新时间:2022-05-11 01:43:28

转自博客:
http://blog.csdn.net/michellehsiao/article/details/7684309

小知识点:.Net Framework 4.0 和.Net Framework 4.0 Client Profile区别

      .NET Framework Client Profile是.NET Framework的裁剪版本。它面向客户端应用程序。它提供 Windows Presentation Foundation (WPF)、Windows 窗体、Windows Communication Foundation (WCF)和 ClickOnce 功能的简化子集。这可以为面向.NET Framework Client Profile 的 WPF、Windows 窗体、WCF 和控制台应用程序实现快速部署方案。

主要内容:

        当在 Visual Studio 2010 建立新项目时,如果发现 [添加引用] 中没有列出原本应该列出的组件时,可以先检查是否是项目的目标框架是否设成了 .NET 4.0 Client Profile (例如 System.Web.dll 就不在 .NET 4.0 Client Profile 套件中)。

1、添加引用:COM组件下的Microsoft Word 11.0 Object Library ,然后会出现Microsoft  Office Core和Word以及VBIDE的引用,如下图

如何在C#下利用RichTextBox打开一个有文字格式和图片的Word文档

2、修改项目属性嵌入互操作类型为false,

如何在C#下利用RichTextBox打开一个有文字格式和图片的Word文档

3、接着在命名空间中写入如下内容:

如何在C#下利用RichTextBox打开一个有文字格式和图片的Word文档

这样就可以顺利使用下面代码,而不会出错!

    Word.ApplicationClass app = new Word.ApplicationClass();
    Word.Document doc = null;
 
[csharp] view plaincopy
  1. //用richTextBox打开带格式的word文档。  
  2. //先打开word文档,全选其中的内容并保存的剪切板中,最后在richTextBox中粘贴数据,并关闭文档,支持图片和文字格式显示  
  3. public void OpenWord(string fileName)  
  4. {  
  5.     Word.ApplicationClass app = new Word.ApplicationClass();  
  6.     Word.Document doc = null;  
  7.     object missing = System.Reflection.Missing.Value;  
  8.     object File = fileName;  
  9.     object readOnly = false;  
  10.     object isVisible = true;  
  11.     try  
  12.     {  
  13.         doc = app.Documents.Open(ref File, ref missing, ref readOnly,  
  14.          ref missing, ref missing, ref missing, ref missing, ref missing,  
  15.          ref missing, ref missing, ref missing, ref isVisible, ref missing,  
  16.          ref missing, ref missing, ref missing);  
  17.   
  18.         doc.ActiveWindow.Selection.WholeStory();//全选word文档中的数据  
  19.         doc.ActiveWindow.Selection.Copy();//复制数据到剪切板  
  20.         richTextBox1.Paste();//richTextBox粘贴数据  
  21.         //richTextBox1.Text = doc.Content.Text;//显示无格式数据  
  22.     }  
  23.     finally  
  24.     {  
  25.         if (doc != null)  
  26.         {  
  27.             doc.Close(ref missing, ref missing, ref missing);  
  28.             doc = null;  
  29.         }  
  30.   
  31.         if (app != null)  
  32.         {  
  33.             app.Quit(ref missing, ref missing, ref missing);  
  34.             app = null;  
  35.         }  
  36.     }  
  37. }  

修改RichTextBox内容后,另存为功能实现代码如下:
[csharp] view plaincopy
  1. public void SaveAsWord(string fileName)  
  2. {  
  3.     Word.ApplicationClass app = new Word.ApplicationClass();  
  4.     Word.Document doc = null;  
  5.     object missing = System.Reflection.Missing.Value;  
  6.     object File = fileName;  
  7.     try  
  8.     {  
  9.         doc = app.Documents.Add(ref missing, ref missing, ref missing, ref missing);  
  10.   
  11.         doc.ActiveWindow.Selection.WholeStory();//全选  
  12.         richTextBox1.SelectAll();  
  13.         Clipboard.SetData(DataFormats.Rtf, richTextBox1.SelectedRtf);//复制RTF数据到剪贴板   
  14.         doc.ActiveWindow.Selection.Paste();  
  15.   
  16.         doc.SaveAs(ref File, ref missing, ref missing,  
  17.             ref missing, ref missing, ref missing,  
  18.             ref missing, ref missing, ref missing,  
  19.             ref missing, ref missing, ref missing,  
  20.             ref missing, ref missing, ref missing,  
  21.             ref missing);  
  22.     }  
  23.     finally  
  24.     {  
  25.         if (doc != null)  
  26.         {  
  27.             doc.Close(ref missing, ref missing, ref missing);  
  28.             doc = null;  
  29.         }  
  30.   
  31.         if (app != null)  
  32.         {  
  33.             app.Quit(ref missing, ref missing, ref missing);  
  34.             app = null;  
  35.         }  
  36.     }  
  37. }