您的位置:首页 > 编程语言 > C#

C# 操作word文档

2013-07-15 14:50 531 查看
原文:http://www.cnblogs.com/wpf123/archive/2011/04/21/2052879.html

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



1

using Word = Microsoft.Office.Interop.Word;

2


3

object 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

2

object omissing = system.reflection.missing.value;

3

word.applicationclass wordapp= new microsoft.office.interop.word.applicationclass();

4

object readonly = false;

5

object template = templatepath;

6

word._document doc = wordapp.documents.open(ref template, ref omissing,ref readonly,

7

ref omissing, ref omissing, ref omissing, ref omissing, ref omissing, ref omissing,

8

ref omissing, ref omissing, ref omissing,ref omissing,ref omissing,ref omissing,ref omissing);

9

// modify

10

for (int i = 1; i <= doc.bookmarks.count; i++)

11

{

12

object j = i;

13

word.range wordrng = doc.bookmarks.get_item(ref j).range;

14

wordrng.text = "这是第" + i + "个标签,名称为" + doc.bookmarks.get_item(ref j).name;

15

}

16


17

// save

18

object savefilename = mappath(request.applicationpath + "/document") + "/" + guid.newguid().tostring() + ".doc";

19

doc.saveas(ref savefilename,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,

20

ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing,ref omissing);

21

doc.close( ref omissing, ref omissing, ref omissing );

22

wordapp.quit( ref omissing, ref omissing, ref omissing );

23


24


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



1

object filename=""; //要打开的文档路径

2

string strKey=""; //要搜索的文本

3

object MissingValue=Type.Missing;

4


5

Word.Application wp=new Word.ApplicationClass();

6

Word.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);

14

int i=0,iCount=0;

15

Word.Find wfnd;

16


17

if (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文档并填充数据



1

using System;

2

using System.Collections.Generic;

3

using System.Text;

4

using System.IO;

5

using Word;

6


7

namespace 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


3

Microsoft.Office.Interop.Word.ApplicationClass appclass = new Microsoft.Office.Interop.Word.ApplicationClass();//实例化一个Word

4

Type wordtype = appclass.GetType();

5

Microsoft.Office.Interop.Word.Documents docs = appclass.Documents;//获取Document

6

Type docstype = docs.GetType();

7

object filename = ;//n.FullPath为Word文件的路径

8

Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docstype.InvokeMember("Open",System.Reflection.BindingFlags.InvokeMethod,null,docs,new object[]{filename,true,true});//打开文件

9

Type doctype = doc.GetType();

10

object savefilename = Application.StartupPath+@"\ccyt_chm\inform\"+n.FullPath.Split('.').GetValue(0)+".html";

11

doctype.InvokeMember("SaveAs",System.Reflection.BindingFlags.InvokeMethod,null,doc,new object[]{savefilename,Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML});//另存为Html格式

12

wordtype.InvokeMember("Quit",System.Reflection.BindingFlags.InvokeMethod,null,appclass,null);//退出

13

Thread.Sleep(3000);//为了使退出完全,这里阻塞3秒

14

StreamReader objreader = new StreamReader(savefilename.ToString(),System.Text.Encoding.GetEncoding("GB2312")); //以下内容是为了在Html中加入对本身Word文件的下载

15

FileStream fs = new FileStream(savefilename.ToString().Split('.').GetValue(0).ToString()+"$.html",FileMode.Create);

16

streamHtmlHelp = new System.IO.StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));

17

streamHtmlHelp.WriteLine("<a href=\""+n.Text+"\">源文件下载</a><br>");

18

do

19

{

20

str = objreader.ReadLine();

21

streamHtmlHelp.WriteLine(str);

22

}

23

while (str != "</html>");

24

streamHtmlHelp.Close();

25

objreader.Close();

26

File.Delete(savefilename.ToString());

27

File.Move(savefilename.ToString().Split('.').GetValue(0).ToString()+"$.html",savefilename.ToString());Application.StartupPath+@"\ccyt_chm\inform\"+n.FullPath

28


29

//Excel -〉Html(这个与Word不同,因为Excel为很多层,又并列很多层,必须都清空才能销毁实例,但实际中我发现并不是每次都能销毁,所以网上求解多次没有结果,只能杀没进程,为了保证只杀灭最近的进程,我用时间进行判断)

30


31

Microsoft.Office.Interop.Excel.Application repExcel = new Microsoft.Office.Interop.Excel.Application ();//实例化Excel

32

Microsoft.Office.Interop.Excel.Workbook workbook = null;

33

Microsoft.Office.Interop.Excel.Worksheet worksheet = null;

34

workbook = repExcel.Application.Workbooks.Open();//打开文件,n.FullPath是文件路径

35

worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];

36

object htmlFile = Application.StartupPath+@"\ccyt_chm\inform\"+n.FullPath.Split('.').GetValue(0)+".html";

37

object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;

38

workbook.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);//进行另存为操作

39

object osave = false;

40

workbook.Close(osave,Type.Missing,Type.Missing);//逐步关闭所有使用的对象

41

repExcel.Quit();

42

System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);

43

worksheet = null;

44

GC.Collect();//垃圾回收

45

System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);

46

workbook=null;

47

GC.Collect();

48

System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel.Application.Workbooks);

49

GC.Collect();

50

System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel);

51

repExcel = null;

52

GC.Collect();

53

System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("EXCEL");//依据时间杀灭进程

54

foreach ( 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

}

61

Thread.Sleep(3000);//保证完全关闭

62

StreamReader objreader = new StreamReader(htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001.html",System.Text.Encoding.GetEncoding("GB2312"));//以下内容是在Html的第一个框架中添加下载原Excel的超链接

63

FileStream fs = new FileStream(htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001$.html",FileMode.Create);

64

streamHtmlHelp = new System.IO.StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));

65

streamHtmlHelp.WriteLine("<a href=\""+"../"+n.Text+"\">源文件下载</a><br>");

66

do

67

{

68

str = objreader.ReadLine();

69

streamHtmlHelp.WriteLine(str);

70

}

71

while (str != "</html>");

72

streamHtmlHelp.Close();

73

objreader.Close();

74

File.Delete(htmlFile.ToString().Split('.').GetValue(0)+".files\\sheet001.html");

75

File.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


21

using Word = Microsoft.Office.Interop.Word;

22


23

using System.Reflection;

24


25

using System.Diagnostics;

26


27

using System.IO;

28


29

//关于变量:word的com对象需要传入的参数定义

30


31

Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();

32


33

object missing = System.Reflection.Missing.Value;

34


35

object falseValue = false;

36


37

object 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


51

private void button1_Click(object sender, EventArgs e)

52


53

{

54


55

object fileName = CopyTemplateDoc();//copy doc in

56


57

Word.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


59

object linkTo = CopyExcelData();//copy excel data

60


61

object query = "SELECT * FROM `Sheet1$`";//data from sheet1

62


63

object header = "Name,Category,Address,Content";//filed list

64


65

try

66


67

{

68


69

doc.MailMerge.CreateDataSource(ref linkTo, ref missing, ref missing, ref header, ref falseValue, ref query, ref missing, ref missing, ref trueValue);

70


71

doc.MailMerge.Fields.Add(WordApp.Selection.Range, "Name");//add one filed to test

72


73

MessageBox.Show("success");

74


75

}

76


77

catch (Exception ex)

78


79

{

80


81

MessageBox.Show(ex.Message);

82


83

}

84


85

finally

86


87

{

88


89

doc.Save();//save word

90


91

CloseApp();//close word app

92


93

CopyExcelData();//copy data again,*******************

94


95

}

96


97

}

98


99

//关于关闭word对象

100


101

public void CloseApp()

102

{

103

WordApp.Documents.Close(ref trueValue, ref missing, ref missing);

104

WordApp.Quit(ref trueValue, ref missing, ref missing);

105

System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);

106

GC.Collect();

107


108

//this.KillExcelProcess();

109

}

110


111

//还有两个工具函数不再赘述,用来copy文件并且返回文件名private string CopyExcelData();和private string CopyTemplateDoc()。

112


7.c#操作word表格



1

//对word中表格的操作,以下是部分代码,关于操作不规则表格的.

2

using System;

3

using System.Collections;

4

using System.ComponentModel;

5

using System.Data;

6

using System.Drawing;

7

using System.Web;

8

using System.Web.SessionState;

9

using System.Web.UI;

10

using System.Web.UI.WebControls;

11

using System.Web.UI.HtmlControls;

12

using System.Configuration;

13

using System.IO;

14


15

using System.Reflection;

16

using System.Runtime.InteropServices ;

17

using System.Threading;

18


19

public 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

//程序中添加

7

Word.Application app = new Microsoft.Office.Interop.Word.Application(); //可以打开word程序

8

Word.Document doc = null; //一会要记录word打开的文档

9

//word文档和word程序可不是一回事奥!

10

4:

11

//一般来说,对于抽取word内容,用的方法很少

12

public override void openFile(object fileName){} //打开文档

13

public override object readPar(int i){} //读取word文档的第i段

14

public override int getParCount(){} //返回word文档一共几段

15

public override void closeFile(){} //关闭文档

16

public override void quit(){} //关闭word程序

17


18

//从网页上拷贝的目录有时候会出现手动换行符^l,,先将其换成回车段落标记,才能正确读取

19

public void replaceChar(){}

20


21

5:代码

22


23

public 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

}

68

public 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


81

public override int getParCount()

82

{

83

return doc.Paragraphs.Count;

84

}

85


86

public 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


100

public 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


114

public 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文档内容并显示



1

private 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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: