-
C#教程之C#生成word记录实例解析
本文以实例形式讲述了C#生成Word记录的方法,具体实现代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
private void button1_Click( object sender, System.EventArgs e) { object oMissing = System.Reflection.Missing.Value; object oEndOfDoc = "\\endofdoc" ; /* \endofdoc是预定义的bookmark */ //创建一个document. Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true ; oDoc = oWord.Documents.Add( ref oMissing, ref oMissing, ref oMissing, ref oMissing); //在document的开始部分添加一个paragraph. Word.Paragraph oPara1; oPara1 = oDoc.Content.Paragraphs.Add( ref oMissing); oPara1.Range.Text = "Heading 1" ; oPara1.Range.Font.Bold = 1; oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter(); //在当前document的最后添加一个paragraph Word.Paragraph oPara2; object oRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; oPara2 = oDoc.Content.Paragraphs.Add( ref oRng); oPara2.Range.Text = "Heading 2" ; oPara2.Format.SpaceAfter = 6; oPara2.Range.InsertParagraphAfter(); //接着添加一个paragraph Word.Paragraph oPara3; oRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; oPara3 = oDoc.Content.Paragraphs.Add( ref oRng); oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:" ; oPara3.Range.Font.Bold = 0; oPara3.Format.SpaceAfter = 24; oPara3.Range.InsertParagraphAfter(); //添加一个3行5列的表格,填充数据,并且设定第一行的样式 Word.Table oTable; Word.Range wrdRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing); oTable.Range.ParagraphFormat.SpaceAfter = 6; int r, c; string strText; for (r = 1; r <= 3; r++) for (c = 1; c <= 5; c++) { strText = "r" + r + "c" + c; oTable.Cell(r, c).Range.Text = strText; } oTable.Rows[1].Range.Font.Bold = 1; oTable.Rows[1].Range.Font.Italic = 1; //接着添加一些文字 Word.Paragraph oPara4; oRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; oPara4 = oDoc.Content.Paragraphs.Add( ref oRng); oPara4.Range.InsertParagraphBefore(); oPara4.Range.Text = "And here's another table:" ; oPara4.Format.SpaceAfter = 24; oPara4.Range.InsertParagraphAfter(); //添加一个5行2列的表,填充数据并且改变列宽 wrdRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing); oTable.Range.ParagraphFormat.SpaceAfter = 6; for (r = 1; r <= 5; r++) for (c = 1; c <= 2; c++) { strText = "r" + r + "c" + c; oTable.Cell(r, c).Range.Text = strText; } oTable.Columns[1].Width = oWord.InchesToPoints(2); //Change width of columns 1 & 2 oTable.Columns[2].Width = oWord.InchesToPoints(3); //Keep inserting text. When you get to 7 inches from top of the //document, insert a hard page break. object oPos; double dPos = oWord.InchesToPoints(7); oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range.InsertParagraphAfter(); do { wrdRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; wrdRng.ParagraphFormat.SpaceAfter = 6; wrdRng.InsertAfter( "A line of text" ); wrdRng.InsertParagraphAfter(); oPos = wrdRng.get_Information (Word.WdInformation.wdVerticalPositionRelativeToPage); } while (dPos >= Convert.ToDouble(oPos)); object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd; object oPageBreak = Word.WdBreakType.wdPageBreak; wrdRng.Collapse( ref oCollapseEnd); wrdRng.InsertBreak( ref oPageBreak); wrdRng.Collapse( ref oCollapseEnd); wrdRng.InsertAfter( "We're now on page 2. Here's my chart:" ); wrdRng.InsertParagraphAfter(); //添加一个chart Word.InlineShape oShape; object oClassType = "MSGraph.Chart.8" ; wrdRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; oShape = wrdRng.InlineShapes.AddOLEObject( ref oClassType, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); //Demonstrate use of late bound oChart and oChartApp objects to //manipulate the chart object with MSGraph. object oChart; object oChartApp; oChart = oShape.OLEFormat.Object; oChartApp = oChart.GetType().InvokeMember( "Application" , BindingFlags.GetProperty, null , oChart, null ); //Change the chart type to Line. object [] Parameters = new Object[1]; Parameters[0] = 4; //xlLine = 4 oChart.GetType().InvokeMember( "ChartType" , BindingFlags.SetProperty, null , oChart, Parameters); //Update the chart image and quit MSGraph. oChartApp.GetType().InvokeMember( "Update" , BindingFlags.InvokeMethod, null , oChartApp, null ); oChartApp.GetType().InvokeMember( "Quit" , BindingFlags.InvokeMethod, null , oChartApp, null ); //... If desired, you can proceed from here using the Microsoft Graph //Object model on the oChart and oChartApp objects to make additional //changes to the chart. //Set the width of the chart. oShape.Width = oWord.InchesToPoints(6.25f); oShape.Height = oWord.InchesToPoints(3.57f); //Add text after the chart. wrdRng = oDoc.Bookmarks.get_Item( ref oEndOfDoc).Range; wrdRng.InsertParagraphAfter(); wrdRng.InsertAfter( "THE END." ); //Close this form. this .Close(); } |
使用模板生成通用格式Word文件:
如果您要使用自动化功能创建的文档都是通用格式,则利用基于预设格式的模板的新文档来开始创建过程会更加容易。与从头创建文档相比,将某个模板与 Word 自动化客户端配合使用有两大优点:
1.您可以对整个文档中的对象的格式设置和布局施加更多控制。
2.可以使用较少的代码创建文档。
通过使用模板,可以精确地调整表格、段落和其他对象在文档中的布局,并可为这些对象添加格式设置。通过使用自动化功能,可以基于包含下面这样的代码的模板创建新文档: 在模板中,可以定义书签,这样,自动化客户端就可以在文档的特定位置加入可变文本,如下所示: 使用模板的另一个优点在于,您可以创建和存储希望在运行时应用的格式样式,如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
|
object oTemplate = "c:\\MyTemplate.dot" ; oDoc = oWord.Documents.Add( ref oTemplate, ref oMissing, ref oMissing, ref oMissing); object oBookMark = "MyBookmark" ; oDoc.Bookmarks.Item( ref oBookMark).Range.Text = "Some Text Here" ; object oStyleName = "MyStyle" ; oDoc.Bookmarks.Item( ref oBookMark).Range.set_Style( ref oStyleName); object oStyleName = "MyStyle" ; oWord.Selection.set_Style( ref oStyleName); |
最主要的就是理解word application 的框架层次,其它的就像面向过程编程一样,一步步写代码,其中比较麻烦的是嵌套的表格。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式