C# 操作word文档

1.c#操作word 在指定书签插入文字或者图片


 1using Word = Microsoft.Office.Interop.Word;
 2
 3object Nothing = System.Reflection.Missing.Value;
 4         object format = Word.WdSaveFormat.wdFormatDocument;
 5         Word.Application wordApp = new Word.ApplicationClass();
 6         //打开网页选择内容
 7         object srcFileName = @"c:\new1.doc"; //里面有图片
 8          Word.Document wordDoc2 = wordApp.Documents.Open(ref srcFileName, ref format, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
 9            try
10         {
11             object bookmarkName = "jlr";
12             //Word.Range rng = wordDoc2.Bookmarks.get_Item(ref bookmarkName).Range;
13             //rng.Text = "newText";
14             //object range = rng;
15             //wordDoc2.Bookmarks.Add("jlr", ref range);
16             wordDoc2.Bookmarks.get_Item(ref bookmarkName).Select();
17             wordApp.Selection.InlineShapes.AddPicture("c:\\1.jpg", ref Nothing, ref Nothing, ref Nothing);
18             wordDoc2.Save();
19
20         }
21         catch { }
22         finally
23         {
24             //关闭网页wordDoc2
25             wordDoc2.Close(ref Nothing, ref Nothing, ref Nothing);
26             if (wordDoc2 != null)
27             {
28                 System.Runtime.InteropServices.Marshal.ReleaseComObject(wordDoc2);
29                 wordDoc2 = null;
30             }
31             //关闭wordApp
32             wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
33             if (wordApp != null)
34             {
35                 System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
36                 wordApp = null;
37             }
38         }
39         GC.Collect();
40
41

2.C#替换Word模版中的标签内容的例子


 1// open 
 2object omissing = system.reflection.missing.value; 
 3word.applicationclass wordapp= new microsoft.office.interop.word.applicationclass(); 
 4object readonly = false; 
 5object template = templatepath; 
 6word._document doc = wordapp.documents.open(ref template, ref omissing,ref readonly, 
 7ref omissing, ref omissing, ref omissing, ref omissing, ref omissing, ref omissing, 
 8ref omissing, ref omissing, ref omissing,ref omissing,ref omissing,ref omissing,ref omissing); 
 9// modify 
10for (int i = 1; i <= doc.bookmarks.count; i++) 
11
12object j = i; 
13word.range wordrng = doc.bookmarks.get_item(ref j).range; 
14wordrng.text = "这是第" + i + "个标签,名称为" + doc.bookmarks.get_item(ref j).name; 
15
16
17// save 
18object savefilename = mappath(request.applicationpath + "/document") + "/" + guid.newguid().tostring() + ".doc"; 
19doc.saveas(ref savefilename,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing, 
20ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing); 
21doc.close( ref omissing, ref omissing, ref omissing ); 
22wordapp.quit( ref omissing, ref omissing, ref omissing );
23
24

3.用C#实现在Word文档中搜索文本


 1object filename="";    //要打开的文档路径
 2string strKey="";      //要搜索的文本
 3object MissingValue=Type.Missing;
 4
 5Word.Application wp=new Word.ApplicationClass();
 6Word.Document wd=wp.Documents.Open(ref filename,ref MissingValue,
 7               ref MissingValue,ref MissingValue,
 8               ref MissingValue,ref MissingValue,
 9               ref MissingValue,ref MissingValue,
10               ref MissingValue,ref MissingValue,
11               ref MissingValue,ref MissingValue,
12               ref MissingValue,ref MissingValue,
13               ref MissingValue,ref MissingValue);
14int i=0,iCount=0;
15Word.Find wfnd;
16
17if (wd.Paragraphs!=null && wd.Paragraphs.Count>0)
18{
19     iCount=wd.Paragraphs.Count;
20    for(i=1;i<=iCount;i++)
21{
22         wfnd=wd.Paragraphs[i].Range.Find;
23         wfnd.ClearFormatting();
24         wfnd.Text=strKey;
25        if (wfnd.Execute(ref MissingValue,ref MissingValue,
26               ref MissingValue,ref MissingValue,
27               ref MissingValue,ref MissingValue,
28               ref MissingValue,ref MissingValue,
29               ref MissingValue,ref MissingValue,
30               ref MissingValue,ref MissingValue,
31               ref MissingValue,ref MissingValue,
32               ref MissingValue))
33        {
34                MessageBox.Show("文档中包含指定的关键字!","搜索结果",MessageBoxButtons.OK);
35               break;
36         }
37     }
38}
39
40
41

4.C#动态生成Word文档并填充数据


  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.IO;
  5using Word;
  6
  7namespace CreateWordFile
  8{
  9    class Program
 10    {
 11        static void Main(string[] args)
 12        {
 13            CreateWordFile("");
 14        }
 15
 16        //下面的例子中包括C#对Word文档的创建、插入表格、设置样式等操作:
 17
 18        //(例子中代码有些涉及数据信息部分被省略,重要是介绍一些C#操作word文档的方法)
 19
 20        public static string CreateWordFile(string CheckedInfo)
 21        {
 22            string message = "";
 23            try
 24            {
 25                Object Nothing = System.Reflection.Missing.Value;
 26                Directory.CreateDirectory("C:/CNSI"); //创建文件所在目录
 27                string name = "CNSI_" + "53asdf" + ".doc";
 28                object filename = "C://CNSI//" + name; //文件保存路径
 29                //创建Word文档
 30                Word.Application WordApp = new Word.ApplicationClass();
 31                Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
 32
 33                //添加页眉
 34                WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
 35                WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
 36                WordApp.ActiveWindow.ActivePane.Selection.InsertAfter("[页眉内容]");
 37                WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;//设置右对齐
 38                WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;//跳出页眉设置
 39
 40                WordApp.Selection.ParagraphFormat.LineSpacing = 15f;//设置文档的行间距
 41
 42                //移动焦点并换行
 43                object count = 14;
 44                object WdLine = Word.WdUnits.wdLine;//换一行;
 45                WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
 46                WordApp.Selection.TypeParagraph();//插入段落
 47
 48                //文档中创建表格
 49                Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref Nothing, ref Nothing);
 50                //设置表格样式
 51                newTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleThickThinLargeGap;
 52                newTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
 53                newTable.Columns[1].Width = 100f;
 54                newTable.Columns[2].Width = 220f;
 55                newTable.Columns[3].Width = 105f;
 56
 57                //填充表格内容
 58                newTable.Cell(1, 1).Range.Text = "产品详细信息表";
 59                newTable.Cell(1, 1).Range.Bold = 2;//设置单元格中字体为粗体
 60                //合并单元格
 61                newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));
 62                WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;//垂直居中
 63                WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;//水平居中
 64
 65                //填充表格内容
 66                newTable.Cell(2, 1).Range.Text = "产品基本信息";
 67                newTable.Cell(2, 1).Range.Font.Color = Word.WdColor.wdColorDarkBlue;//设置单元格内字体颜色
 68                //合并单元格
 69                newTable.Cell(2, 1).Merge(newTable.Cell(2, 3));
 70                WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
 71
 72                //填充表格内容
 73                newTable.Cell(3, 1).Range.Text = "品牌名称:";
 74                newTable.Cell(3, 2).Range.Text = "BrandName";
 75                //纵向合并单元格
 76                newTable.Cell(3, 3).Select();//选中一行
 77                object moveUnit = Word.WdUnits.wdLine;
 78                object moveCount = 5;
 79                object moveExtend = Word.WdMovementType.wdExtend;
 80                WordApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend);
 81                WordApp.Selection.Cells.Merge();
 82                //插入图片
 83                string FileName = "c:\\Winter.jpg";//图片所在路径
 84                object LinkToFile = false;
 85                object SaveWithDocument = true;
 86                object Anchor = WordDoc.Application.Selection.Range;
 87                WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);
 88                WordDoc.Application.ActiveDocument.InlineShapes[1].Width = 100f;//图片宽度
 89                WordDoc.Application.ActiveDocument.InlineShapes[1].Height = 100f;//图片高度
 90                //将图片设置为四周环绕型
 91                Word.Shape s = WordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
 92                s.WrapFormat.Type = Word.WdWrapType.wdWrapSquare;
 93
 94                newTable.Cell(12, 1).Range.Text = "产品特殊属性";
 95                newTable.Cell(12, 1).Merge(newTable.Cell(12, 3));
 96                //在表格中增加行
 97                WordDoc.Content.Tables[1].Rows.Add(ref Nothing);
 98
 99                WordDoc.Paragraphs.Last.Range.Text = "文档创建时间:" + DateTime.Now.ToString();//“落款”
100                WordDoc.Paragraphs.Last.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
101
102                //文件保存
103                WordDoc.SaveAs(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
104                WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
105                WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
106                message = name + "文档生成成功,以保存到C:CNSI下";
107            }
108            catch
109            {
110                message = "文件导出异常!";
111                
112            }
113            Console.WriteLine(message);
114            return message;
115        }
116
117

5.C# 将Word,Excel转换成Html


 1//Word -〉Html
 2
 3Microsoft.Office.Interop.Word.ApplicationClass appclass = new Microsoft.Office.Interop.Word.ApplicationClass();//实例化一个Word
 4Type wordtype = appclass.GetType();
 5Microsoft.Office.Interop.Word.Documents docs = appclass.Documents;//获取Document
 6Type docstype = docs.GetType();
 7object filename = ;//n.FullPath为Word文件的路径
 8Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docstype.InvokeMember("Open",System.Reflection.BindingFlags.InvokeMethod,null,docs,new object[]{filename,true,true});//打开文件
 9Type doctype = doc.GetType();
10object savefilename = Application.StartupPath+@"\ccyt_chm\inform\"+n.FullPath.Split('.').GetValue(0)+".html";
11doctype.InvokeMember("SaveAs",System.Reflection.BindingFlags.InvokeMethod,null,doc,new object[]{savefilename,Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML});//另存为Html格式
12wordtype.InvokeMember("Quit",System.Reflection.BindingFlags.InvokeMethod,null,appclass,null);//退出
13Thread.Sleep(3000);//为了使退出完全,这里阻塞3秒
14StreamReader objreader = new StreamReader(savefilename.ToString(),System.Text.Encoding.GetEncoding("GB2312"));   //以下内容是为了在Html中加入对本身Word文件的下载       
15FileStream fs = new FileStream(savefilename.ToString().Split('.').GetValue(0).ToString()+"$.html",FileMode.Create);
16streamHtmlHelp = new System.IO.StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
17streamHtmlHelp.WriteLine("<a href=\""+n.Text+"\">源文件下载</a><br>");
18do 
19{
20     str = objreader.ReadLine();
21     streamHtmlHelp.WriteLine(str);
22}
23while (str != "</html>");
24streamHtmlHelp.Close();
25objreader.Close();
26File.Delete(savefilename.ToString());
27File.Move(savefilename.ToString().Split('.').GetValue(0).ToString()+"$.html",savefilename.ToString());Application.StartupPath+@"\ccyt_chm\inform\"+n.FullPath
28
29//Excel -〉Html(这个与Word不同,因为Excel为很多层,又并列很多层,必须都清空才能销毁实例,但实际中我发现并不是每次都能销毁,所以网上求解多次没有结果,只能杀没进程,为了保证只杀灭最近的进程,我用时间进行判断)
30
31Microsoft.Office.Interop.Excel.Application   repExcel   =   new   Microsoft.Office.Interop.Excel.Application ();//实例化Excel
32Microsoft.Office.Interop.Excel.Workbook   workbook   =   null;         
33Microsoft.Office.Interop.Excel.Worksheet worksheet   =   null;
34workbook   =   repExcel.Application.Workbooks.Open();//打开文件,n.FullPath是文件路径
35worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
36object   htmlFile   =   Application.StartupPath+@"\ccyt_chm\inform\"+n.FullPath.Split('.').GetValue(0)+".html";   
37object   ofmt   =   Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;   
38workbook.SaveAs(htmlFile,ofmt,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);//进行另存为操作   
39object   osave   =   false;         
40workbook.Close(osave,Type.Missing,Type.Missing);//逐步关闭所有使用的对象
41repExcel.Quit();
42System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
43worksheet = null;
44GC.Collect();//垃圾回收
45System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
46workbook=null;
47GC.Collect();
48System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel.Application.Workbooks);
49GC.Collect();
50System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel);
51repExcel = null;
52GC.Collect();
53System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("EXCEL");//依据时间杀灭进程
54foreach ( System.Diagnostics.Process p in process)
55{
56     if (DateTime.Now.Second - p.StartTime.Second > 0 && DateTime.Now.Second - p.StartTime.Second < 5)
57     {
58           p.Kill();
59      }
60}
61Thread.Sleep(3000);//保证完全关闭
62StreamReader objreader = new StreamReader(htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001.html",System.Text.Encoding.GetEncoding("GB2312"));//以下内容是在Html的第一个框架中添加下载原Excel的超链接         
63FileStream fs = new FileStream(htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001$.html",FileMode.Create);
64streamHtmlHelp = new System.IO.StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
65streamHtmlHelp.WriteLine("<a href=\""+"../"+n.Text+"\">源文件下载</a><br>");
66do 
67{
68     str = objreader.ReadLine();
69     streamHtmlHelp.WriteLine(str);
70}
71while (str != "</html>");
72streamHtmlHelp.Close();
73objreader.Close();
74File.Delete(htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001.html");
75File.Move(htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001$.html",htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001.html");Application.StartupPath+@"\ccyt_chm\inform\"+n.FullPath,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing
76

6.c# 实现Word联接Excel的MailMerge功能


  1//目标:使用word的MailMerge功能,数据源是Excel中的数据。这些资料在网上很少,只能自己慢慢测试了。
  2
  3//关于Word的MailMerge功能:
  4
  5//word提供邮件的模板,可以选择各种数据源,比如数据库,excel等,然后群发(或打印、另存文件)邮件。
  6
  7 
  8
  9//为了实现这个功能,我的程序要能做的是
 10
 11//1:打开word文件对象
 12
 13//2:设置MailMerge数据源:指定Excel,指定查询语句,指定联接的列s
 14
 15//3:关闭保存
 16
 17 
 18
 19//关于引用:
 20
 21using Word = Microsoft.Office.Interop.Word;
 22
 23using System.Reflection;
 24
 25using System.Diagnostics;
 26
 27using System.IO;
 28
 29//关于变量:word的com对象需要传入的参数定义
 30
 31Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
 32
 33object missing = System.Reflection.Missing.Value; 
 34
 35object falseValue = false;
 36
 37object trueValue = true;
 38
 39//关于处理
 40
 41//需要注重的是
 42
 43//1:打开word的方式
 44
 45//2:query的写法。类似于sql一般,比较好玩。
 46
 47//3:设置列,。设置之后,在word中可以看见这些列。
 48
 49//4:关闭word之后,还得再copy一次excel。直接生成之后的excel文件size暴涨,文件还打不开,所以覆盖一遍了之。原因不详。
 50
 51private void button1_Click(object sender, EventArgs e)
 52
 53{
 54
 55object fileName = CopyTemplateDoc();//copy doc in
 56
 57Word.Document doc = WordApp.Documents.Open(ref fileName, ref missing, ref falseValue, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref trueValue, ref missing, ref missing, ref missing);
 58
 59object linkTo = CopyExcelData();//copy excel data
 60
 61object query = "SELECT * FROM `Sheet1$`";//data from sheet1
 62
 63object header = "Name,Category,Address,Content";//filed list
 64
 65try
 66
 67{
 68
 69doc.MailMerge.CreateDataSource(ref linkTo, ref missing, ref missing, ref header, ref falseValue, ref query, ref missing, ref missing, ref trueValue);
 70
 71doc.MailMerge.Fields.Add(WordApp.Selection.Range, "Name");//add one filed to test
 72
 73MessageBox.Show("success");
 74
 75}
 76
 77catch (Exception ex)
 78
 79{
 80
 81MessageBox.Show(ex.Message);
 82
 83}
 84
 85finally
 86
 87{
 88
 89doc.Save();//save word
 90
 91CloseApp();//close word app
 92
 93CopyExcelData();//copy data again,*******************
 94
 95}
 96
 97}
 98
 99//关于关闭word对象
100
101public void CloseApp()
102{
103WordApp.Documents.Close(ref trueValue, ref missing, ref missing);
104WordApp.Quit(ref trueValue, ref missing, ref missing);
105System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);
106GC.Collect();
107
108//this.KillExcelProcess();
109}
110
111//还有两个工具函数不再赘述,用来copy文件并且返回文件名private string CopyExcelData();和private string CopyTemplateDoc()。
112

7.c#操作word表格


  1//对word中表格的操作,以下是部分代码,关于操作不规则表格的.
  2using System;
  3using System.Collections;
  4using System.ComponentModel;
  5using System.Data;
  6using System.Drawing;
  7using System.Web;
  8using System.Web.SessionState;
  9using System.Web.UI;
 10using System.Web.UI.WebControls;
 11using System.Web.UI.HtmlControls;
 12using System.Configuration;
 13using System.IO; 
 14
 15using System.Reflection;
 16using System.Runtime.InteropServices ;
 17using System.Threading;
 18
 19public void MakeMyTable(DataTable DT,string strFilePath)
 20   {
 21   
 22    string strEnd   = this.txtEnd.Text.Trim().ToString();
 23    string strStart = this.txtStart.Text.Trim().ToString();
 24//生成文档分页中的起始和终止页
 25    string strSign = "("+strStart + "-" + strEnd + ")";
 26
 27    //杀掉所有word进程以保证速度
 28    //KillWordProcess();
 29
 30    object Nothing = System.Reflection.Missing.Value; 
 31    object missing = System.Reflection.Missing.Value; 
 32    object filename= strFilePath;
 33
 34    Word.Application wordApp=new Word.ApplicationClass(); 
 35    Word.Document wordDoc=wordApp.Documents.Add(ref Nothing,ref Nothing,ref Nothing,ref Nothing);
 36
 37    try
 38    {
 39     //生成过程中屏蔽返回按扭,不允许中途停止
 40     Button2.Enabled = false;
 41     生成文档
527
528   
529
530    }
531    catch
532    {
533     wordDoc.Close(ref Nothing, ref Nothing, ref Nothing); 
534     wordApp.Quit(ref Nothing, ref Nothing, ref Nothing); 
535     if ( wordDoc != null )
536     {
537      System.Runtime.InteropServices.Marshal.ReleaseComObject(wordDoc);
538      wordDoc = null;
539     }
540     if ( wordApp != null )
541     {
542      System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
543      wordApp = null;
544     }
545     GC.Collect();
546     utility.ShowPopMessage("文档生成失败!");
547
548    }
549   }
550
551

8.c#读取Word


  1//1:
  2//对项目添加引用,Microsoft Word 11.0 Object //Library
  3//2:
  4//在程序中添加 using Word = Microsoft.Office.Interop.Word; 
  5//3:
  6//程序中添加
  7Word.Application app = new Microsoft.Office.Interop.Word.Application(); //可以打开word程序
  8Word.Document doc = null; //一会要记录word打开的文档
  9//word文档和word程序可不是一回事奥!
 104:
 11//一般来说,对于抽取word内容,用的方法很少
 12public override void openFile(object fileName){} //打开文档
 13public override object readPar(int i){} //读取word文档的第i段
 14public override int getParCount(){} //返回word文档一共几段
 15public override void closeFile(){} //关闭文档
 16public override void quit(){} //关闭word程序
 17
 18//从网页上拷贝的目录有时候会出现手动换行符^l,,先将其换成回车段落标记,才能正确读取
 19public void replaceChar(){}
 20
 215:代码
 22
 23public override void openFile(object fileName)
 24        {
 25            try
 26            {
 27                if (app.Documents.Count > 0)
 28                {
 29                    if (MessageBox.Show("已经打开了一个word文档,你想关闭重新打开该文档吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
 30                    {
 31                        object unknow = Type.Missing;
 32                        doc = app.ActiveDocument;
 33                        if (MessageBox.Show("你想保存吗?", "保存", MessageBoxButtons.YesNo) == DialogResult.Yes)
 34                        {
 35                            app.ActiveDocument.Save();
 36                        }
 37
 38                        app.ActiveDocument.Close(ref unknow, ref unknow, ref unknow);
 39                        app.Visible = false;
 40                    }
 41                    else
 42                    {
 43                        return;
 44                    }
 45                }
 46            }
 47            catch (Exception)
 48            {
 49                //MessageBox.Show("您可能关闭了文档");
 50                app = new Microsoft.Office.Interop.Word.Application();
 51            }
 52
 53            try
 54            {
 55                object unknow = Type.Missing;
 56                app.Visible = true;
 57                doc = app.Documents.Open(ref fileName,
 58                                         ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
 59                                         ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
 60                                         ref unknow, ref unknow, ref unknow, ref unknow, ref unknow);
 61             }
 62             catch (Exception ex)
 63             {
 64                 MessageBox.Show("出现错误:" + ex.ToString());
 65             }   
 66           
 67        }
 68public override object readPar(int i)
 69        {
 70            try
 71            {
 72                string temp = doc.Paragraphs[i].Range.Text.Trim();
 73                return temp;
 74            }
 75            catch (Exception e) {
 76                MessageBox.Show("Error:"+e.ToString());
 77                return null;
 78            }
 79        }
 80
 81public override int getParCount()
 82        {
 83            return doc.Paragraphs.Count;
 84        }
 85
 86public override void closeFile()
 87        {
 88            try
 89            {
 90                object unknow = Type.Missing;
 91                object saveChanges = Word.WdSaveOptions.wdPromptToSaveChanges;
 92                app.ActiveDocument.Close(ref saveChanges, ref unknow, ref unknow);
 93            }
 94            catch (Exception ex)
 95            {
 96                MessageBox.Show("Error:" + ex.ToString());
 97            }
 98        }
 99
100public override void quit()
101        {
102            try
103            {
104                object unknow = Type.Missing;
105                object saveChanges = Word.WdSaveOptions.wdSaveChanges;
106                app.Quit(ref saveChanges, ref unknow, ref unknow);
107            }
108            catch (Exception)
109            {
110
111            }
112        }
113
114public void replaceChar() {
115            try
116            {
117                object replaceAll = Word.WdReplace.wdReplaceAll;
118                object missing = Type.Missing;
119
120                app.Selection.Find.ClearFormatting();
121                app.Selection.Find.Text = "^l";
122
123                app.Selection.Find.Replacement.ClearFormatting();
124                app.Selection.Find.Replacement.Text = "^p";
125
126                app.Selection.Find.Execute(
127                    ref missing, ref missing, ref missing, ref missing, ref missing,
128                    ref missing, ref missing, ref missing, ref missing, ref missing,
129                    ref replaceAll, ref missing, ref missing, ref missing, ref missing);
130            }
131            catch (Exception e)
132            {
133                MessageBox.Show("文档出现错误,请重新操作");
134            }
135        }
136
137//6:
138//刚才是用读取一段做的例子,如果要读取一句或一篇只需要把doc.Paragraphs[i](readPar中)改成doc.Sentences[i]或doc.content即可,因为都是微软的东东,所以用起来没有一点的障碍,再加上现在的vs2005做的很智能,所以先从java转到了c#上
139
140//7:
141//实际上,c#中读取word是不用那么麻烦的,但是如果考虑到可能还要抽取txt,ppt等多种格式,所以就写了一个抽象类,调用起来也方便,这就是为什么我的程序方法开头会有override的原因,总要考虑到通用,所以多了一些代码。
142
143

9.C#打开WORD文档内容并显示


 1private void button1_Click(object sender, System.EventArgs e)
 2   {
 3    //调用打开文件对话框获取要打开的文件WORD文件,RTF文件,文本文件路径名称
 4    OpenFileDialog opd = new OpenFileDialog();
 5    opd.InitialDirectory = "c:\\";
 6    opd.Filter = "Word文档(*.doc)|*.doc|文本文档(*.txt)|*.txt|RTF文档(*.rtf)|*.rtf|所有文档(*.*)|*.*";
 7    opd.FilterIndex = 1;
 8   
 9    if (opd.ShowDialog() == DialogResult.OK && opd.FileName.Length > 0)
10    {   
11   
12     //建立Word类的实例,缺点:不能正确读取表格,图片等等的显示
13     Word.ApplicationClass app = new Word.ApplicationClass();
14     Word.Document doc = null;
15     object missing = System.Reflection.Missing.Value;
16
17     object FileName = opd.FileName;
18     object readOnly = false;
19     object isVisible = true;
20     object index = 0;
21     try
22     {
23      doc = app.Documents.Open(ref FileName, ref missing, ref readOnly,
24       ref missing, ref missing, ref missing, ref missing, ref missing,
25       ref missing, ref missing, ref missing, ref isVisible, ref missing,
26       ref missing, ref missing, ref missing);
27
28      doc.ActiveWindow.Selection.WholeStory();
29      doc.ActiveWindow.Selection.Copy(); 
30      //从剪切板获取数据
31      IDataObject data=Clipboard.GetDataObject();
32      this.richTextBox1.Text=data.GetData(DataFormats.Text).ToString();
33      
34     }
35     finally
36     {
37      if (doc != null)
38      {
39       doc.Close(ref missing, ref missing, ref missing);
40       doc = null;
41      }
42
43      if (app != null)
44      {
45       app.Quit(ref missing, ref missing, ref missing);
46       app = null;
47      }
48     }
49
50    }
51
52   }

C# Word的更多相关文章

  1. Word/Excel 在线预览

    前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...

  2. C#中5步完成word文档打印的方法

    在日常工作中,我们可能常常需要打印各种文件资料,比如word文档.对于编程员,应用程序中文档的打印是一项非常重要的功能,也一直是一个非常复杂的工作.特别是提到Web打印,这的确会很棘手.一般如果要想选 ...

  3. C# 给word文档添加水印

    和PDF一样,在word中,水印也分为图片水印和文本水印,给文档添加图片水印可以使文档变得更为美观,更具有吸引力.文本水印则可以保护文档,提醒别人该文档是受版权保护的,不能随意抄袭.前面我分享了如何给 ...

  4. 获取打开的Word文档

    using Word = Microsoft.Office.Interop.Word; int _getApplicationErrorCount=0; bool _isMsOffice = true ...

  5. How to accept Track changes in Microsoft Word 2010?

    "Track changes" is wonderful and remarkable tool of Microsoft Word 2010. The feature allow ...

  6. C#将Word转换成PDF方法总结(基于Office和WPS两种方案)

    有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...

  7. 开源Word读写组件DocX 的深入研究和问题总结

    一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...

  8. [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc

    开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...

  9. C# Word中设置/更改文本方向

    C# Word中设置/更改文本方向 一般情况下在Word中输入的文字都是横向的,今天给大家分享两种方法来设置/更改一个section内的所有文本的方向及部分文本的方向,有兴趣的朋友可以试下. 首先,从 ...

  10. C# 合并及拆分Word文档

    本文简要分析一下如何如何使用C#简单实现合并和拆分word文档.平时我们在处理多个word文档时,可能会想要将两个文档合并为一个,或者是将某个文档的一部分添加到另一个文档中,有的时候也会想要将文档拆分 ...

随机推荐

  1. 字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  2. osg配置

    编辑器加载中..OSG+VS2010+win7环境搭建 Win7下 osg+vs2010环境搭建 一.相关准备 a) Osg源码 当前最新版:OpenSceneGraph的3.0.0.zip 下载链接 ...

  3. tyvj P1431 [Tyvj Jan]分配任务(最大流)

    P1431 [Tyvj Jan]分配任务 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述      随着tyvj发展越来越大,管理员的任务越来越重,如何合理的 ...

  4. 60秒找到最对的size?为服饰电商提供尺寸匹配解决方案的True Fit获1500万美元融资 | 36氪

    60秒找到最对的size?为服饰电商提供尺寸匹配解决方案的True Fit获1500万美元融资 | 36氪 60秒找到最对的size?为服饰电商提供尺寸匹配解决方案的True Fit获1500万美元融 ...

  5. PHP 生命周期,Opcode 缓存。

    1.php 执行的生命周期. 用户发出请求---->.php--->词典扫描--->解析--->创建Opcode--->处理opcode--->响应 这就是php的 ...

  6. dos 命令

    DOS远程桌面连接命令 mstsc /v: 192.168.1.250 /console cmd 运行 command删除文件 rd 文件名/S创建文件 MD 文件名 1. net user admi ...

  7. Linux用户root忘记密码的解决(unbuntu16.04)

    参考: http://www.linuxidc.com/Linux/2012-04/59069.htm http://www.68idc.cn/help/server/linux/2015060735 ...

  8. jEdit应用指南【基础篇】

    jEdit是Java编写,强大,易用的程序员文本编辑器 jEdit是一个成熟的,设计优秀的程序员文本编辑器,已经有了7年的开发历史.在功能和易用性方面压倒许多昂贵的开发工具时,jEdit在GNU公用许 ...

  9. SCOI2013 多项式的运算

    ---恢复内容开始--- 又是一道裸数据结构题. 之前受序列操作的蛋疼写法影响,只用一个tag,不知道怎么记,之后看了下别人的,终于领悟要用两个tag,一个add,一个mul,维护相当简单,想清楚就行 ...

  10. 严苛模式(StrictMode)

    Android 2.3提供一个称为严苛模式(StrictMode)的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益.那它都做什么呢?它将报告与线程及虚拟机相关的策 ...