博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.Net下生成Word文档

Posted on 2012-10-31 14:04  code_Craftsman  阅读(295)  评论(0编辑  收藏  举报

记住要引入Word的dll文件 Interop.word.dll (如找不到可以直接根我联系)
在命名空间还有记得加入using System.Reflection;

//===========开始生成Word文档===============好麻烦呀这段=========
privatevoid button5_Click(object sender, EventArgs e)
{
//==========以下程序来自http://support.microsoft.com/kb/316384/zh-cn
object oMissing = System.Reflection.Missing.Value;
object oEndOfDoc ="\\endofdoc"; /* \endofdoc is a predefined bookmark */
//==========开始创建一个Word文档==============
Word._Application oWord =new Word.Application();
Word._Document oDoc
= oWord.Documents.Add(ref oMissing, ref oMissing,ref oMissing, ref oMissing);
oWord.Visible
=true;

//在文档开始插入一段信息
Word.Paragraph oPara1;
oPara1
= oDoc.Content.Paragraphs.Add(ref oMissing);
oPara1.Range.Text
="TT_Article数据库各表说明";
oPara1.Range.Font.Bold
=1;
oPara1.Format.SpaceAfter
=24; //24 pt spacing after paragraph.
oPara1.Range.InsertParagraphAfter();

//Insert a paragraph at the end of the document.
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();

//Insert another 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();

//Insert a 3 x 5 table, fill it with data, and make the first row
//bold and italic.
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;

//Add some text after the table.
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();

//Insert a 5 x 2 table, fill it with data, and change the column widths.
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();

//Insert a 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();

}