当前位置: 移动技术网 > IT编程>开发语言>c# > C#生成word记录实例解析

C#生成word记录实例解析

2019年07月18日  | 移动技术网IT编程  | 我要评论

本文以实例形式讲述了c#生成word记录的方法,具体实现代码如下:

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.可以使用较少的代码创建文档。
通过使用模板,可以精确地调整表格、段落和其他对象在文档中的布局,并可为这些对象添加格式设置。通过使用自动化功能,可以基于包含下面这样的代码的模板创建新文档: 在模板中,可以定义书签,这样,自动化客户端就可以在文档的特定位置加入可变文本,如下所示: 使用模板的另一个优点在于,您可以创建和存储希望在运行时应用的格式样式,如下所示:

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 的框架层次,其它的就像面向过程编程一样,一步步写代码,其中比较麻烦的是嵌套的表格。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网