C#生成word记录实例解析
本文以实例形式讲述了C#生成Word记录的方法,具体实现代码如下:
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
objectoMissing=System.Reflection.Missing.Value;
objectoEndOfDoc="\\endofdoc";
/*\endofdoc是预定义的bookmark*/
//创建一个document.
Word._ApplicationoWord;
Word._DocumentoDoc;
oWord=newWord.Application();
oWord.Visible=true;
oDoc=oWord.Documents.Add(refoMissing,refoMissing,
refoMissing,refoMissing);
//在document的开始部分添加一个paragraph.
Word.ParagraphoPara1;
oPara1=oDoc.Content.Paragraphs.Add(refoMissing);
oPara1.Range.Text="Heading1";
oPara1.Range.Font.Bold=1;
oPara1.Format.SpaceAfter=24;//24ptspacingafterparagraph.
oPara1.Range.InsertParagraphAfter();
//在当前document的最后添加一个paragraph
Word.ParagraphoPara2;
objectoRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
oPara2=oDoc.Content.Paragraphs.Add(refoRng);
oPara2.Range.Text="Heading2";
oPara2.Format.SpaceAfter=6;
oPara2.Range.InsertParagraphAfter();
//接着添加一个paragraph
Word.ParagraphoPara3;
oRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
oPara3=oDoc.Content.Paragraphs.Add(refoRng);
oPara3.Range.Text="Thisisasentenceofnormaltext.Nowhereisatable:";
oPara3.Range.Font.Bold=0;
oPara3.Format.SpaceAfter=24;
oPara3.Range.InsertParagraphAfter();
//添加一个3行5列的表格,填充数据,并且设定第一行的样式
Word.TableoTable;
Word.RangewrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
oTable=oDoc.Tables.Add(wrdRng,3,5,refoMissing,refoMissing);
oTable.Range.ParagraphFormat.SpaceAfter=6;
intr,c;
stringstrText;
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.ParagraphoPara4;
oRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
oPara4=oDoc.Content.Paragraphs.Add(refoRng);
oPara4.Range.InsertParagraphBefore();
oPara4.Range.Text="Andhere'sanothertable:";
oPara4.Format.SpaceAfter=24;
oPara4.Range.InsertParagraphAfter();
//添加一个5行2列的表,填充数据并且改变列宽
wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
oTable=oDoc.Tables.Add(wrdRng,5,2,refoMissing,refoMissing);
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);//Changewidthofcolumns1&2
oTable.Columns[2].Width=oWord.InchesToPoints(3);
//Keepinsertingtext.Whenyougetto7inchesfromtopofthe
//document,insertahardpagebreak.
objectoPos;
doubledPos=oWord.InchesToPoints(7);
oDoc.Bookmarks.get_Item(refoEndOfDoc).Range.InsertParagraphAfter();
do
{
wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
wrdRng.ParagraphFormat.SpaceAfter=6;
wrdRng.InsertAfter("Alineoftext");
wrdRng.InsertParagraphAfter();
oPos=wrdRng.get_Information
(Word.WdInformation.wdVerticalPositionRelativeToPage);
}
while(dPos>=Convert.ToDouble(oPos));
objectoCollapseEnd=Word.WdCollapseDirection.wdCollapseEnd;
objectoPageBreak=Word.WdBreakType.wdPageBreak;
wrdRng.Collapse(refoCollapseEnd);
wrdRng.InsertBreak(refoPageBreak);
wrdRng.Collapse(refoCollapseEnd);
wrdRng.InsertAfter("We'renowonpage2.Here'smychart:");
wrdRng.InsertParagraphAfter();
//添加一个chart
Word.InlineShapeoShape;
objectoClassType="MSGraph.Chart.8";
wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
oShape=wrdRng.InlineShapes.AddOLEObject(refoClassType,refoMissing,
refoMissing,refoMissing,refoMissing,
refoMissing,refoMissing,refoMissing);
//DemonstrateuseoflateboundoChartandoChartAppobjectsto
//manipulatethechartobjectwithMSGraph.
objectoChart;
objectoChartApp;
oChart=oShape.OLEFormat.Object;
oChartApp=oChart.GetType().InvokeMember("Application",
BindingFlags.GetProperty,null,oChart,null);
//ChangethecharttypetoLine.
object[]Parameters=newObject[1];
Parameters[0]=4;//xlLine=4
oChart.GetType().InvokeMember("ChartType",BindingFlags.SetProperty,
null,oChart,Parameters);
//UpdatethechartimageandquitMSGraph.
oChartApp.GetType().InvokeMember("Update",
BindingFlags.InvokeMethod,null,oChartApp,null);
oChartApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod,null,oChartApp,null);
//...Ifdesired,youcanproceedfromhereusingtheMicrosoftGraph
//ObjectmodelontheoChartandoChartAppobjectstomakeadditional
//changestothechart.
//Setthewidthofthechart.
oShape.Width=oWord.InchesToPoints(6.25f);
oShape.Height=oWord.InchesToPoints(3.57f);
//Addtextafterthechart.
wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range;
wrdRng.InsertParagraphAfter();
wrdRng.InsertAfter("THEEND.");
//Closethisform.
this.Close();
}
使用模板生成通用格式Word文件:
如果您要使用自动化功能创建的文档都是通用格式,则利用基于预设格式的模板的新文档来开始创建过程会更加容易。与从头创建文档相比,将某个模板与Word自动化客户端配合使用有两大优点:
1.您可以对整个文档中的对象的格式设置和布局施加更多控制。
2.可以使用较少的代码创建文档。
通过使用模板,可以精确地调整表格、段落和其他对象在文档中的布局,并可为这些对象添加格式设置。通过使用自动化功能,可以基于包含下面这样的代码的模板创建新文档:在模板中,可以定义书签,这样,自动化客户端就可以在文档的特定位置加入可变文本,如下所示:使用模板的另一个优点在于,您可以创建和存储希望在运行时应用的格式样式,如下所示:
objectoTemplate="c:\\MyTemplate.dot"; oDoc=oWord.Documents.Add(refoTemplate,refoMissing, refoMissing,refoMissing); objectoBookMark="MyBookmark"; oDoc.Bookmarks.Item(refoBookMark).Range.Text="SomeTextHere"; objectoStyleName="MyStyle"; oDoc.Bookmarks.Item(refoBookMark).Range.set_Style(refoStyleName); objectoStyleName="MyStyle"; oWord.Selection.set_Style(refoStyleName);
最主要的就是理解wordapplication的框架层次,其它的就像面向过程编程一样,一步步写代码,其中比较麻烦的是嵌套的表格。