您目前已離線,請等候您的網際網路重新連線

如何自動化 Microsoft Word 來使用 Visual C# 來建立新的文件

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:316384
本文章的有 Microsoft Visual Basic.NET] 版本請參閱 316383
本文章的有 Microsoft Visual Basic 6.0] 版本請參閱 313193
結論
本文將逐步告訴您,如何藉由使用自動化從 Microsoft Visual C# 2005年或 Microsoft Visual C#.NET 在 Microsoft Word 中建立新的文件。

範例程式碼

本文中的程式碼範例示範如何執行下列動作:
  • 插入具有文字和格式的段落。
  • 瀏覽並修改文件中的各種範圍。
  • 插入表格、 格式化表格,並填入資料表的資料。
  • 新增一個圖表。
若要使用從 Visual C# 2005年或 Visual C#.NET 的自動化,以建立新的 Word 文件,請依照下列步驟執行:
  1. 啟動 Microsoft Visual Studio 2005 或 Microsoft Visual Studio.NET。
  2. 在 [檔案] 功能表上按一下 [新增],然後按一下 [專案]。在 [專案類型 下, 按一下 [Visual C# 專案,] 然後按一下 [範本] 下方的 [Windows 應用程式]。預設會建立 Form1。

    附註在 Visual 的 Studio 2005 按一下 Visual C#Visual C# 專案 而不是。
  3. 加入 Microsoft Word 物件程式庫 的參考。要這麼做,請您執行下列步驟:
    1. 在 [專案] 功能表上按一下 [加入參考]。
    2. 在 [COM] 索引標籤上找不到 Microsoft Word 物件程式庫,然後按一下 [選取]。

      附註在 Visual 的 Studio 2005 中並不需要按一下 [選取
      附註Microsoft Office 2003 包括主要 Interop 組件 (PIA)。 Microsoft Office XP 並不包含 PIA,但是他們可以下載。 如需有關 Office XP PIA,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
      328912資訊: Microsoft Office XP PIA 可供下載
    3. 按一下 [[確定] 在 [加入參考] 對話方塊以接受您的選擇。提示您產生您所選取的程式庫的包裝函式時,按一下 [是]
  4. 在 [檢視] 功能表上選擇 [工具箱],以顯示 [工具箱],然後再新增到 Form1 的 [按鈕]。
  5. 連按兩下 [Button1]。在表單的 [程式碼] 視窗隨即出現。
  6. 在 [程式碼] 視窗中取代與在下列程式碼
    private void button1_Click(object sender, System.EventArgs e){}					
    :
    private void button1_Click(object sender, System.EventArgs e){	object oMissing = System.Reflection.Missing.Value;	object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 	//Start Word and create a new 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);	//Insert a paragraph at the beginning of the document.	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();	//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();}					
  7. 捲動至 [程式碼] 視窗的上方。using 指示詞清單的結尾加入下列行:
    using Word = Microsoft.Office.Interop.Word;using System.Reflection;					
  8. 按下 F5 以建置並執行程式。
  9. 按一下 [Button1 啟動 Word 自動化,並建立文件。
程式碼完成後檢查為您建立文件。文件包含已格式化的段落、 表格及圖表的兩頁。

使用範本

如果您正在使用自動化來建置所有以一般格式的文件,您可以受益於啟動處理程序與預先設定格式的範本為基礎的新文件。以 Word 自動化用戶端使用範本有兩個顯著的優點,透過建置文件不執行任何動作:
  • 您可以對整個文件具有較大的控制權格式和位置的物件。
  • 您可以建置您的文件,以較少的程式碼。
利用範本您可以微調的資料表、 段落和其他物件在文件中的位置,以及包含這些物件的格式。利用自動化,您可以建立新的文件,如下列程式碼範本為基礎的:
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);				
参考
如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件]:
301659HOWTO: 自動化 Microsoft Word 來從 Visual C#.NET 執行合併列印
302902使用 Visual C#.NET Office 自動化伺服器的 HOWTO: 繫結
如需詳細資訊請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:
wd2003 wd2002

Warning: This article has been translated automatically

內容

文章識別碼:316384 - 最後檢閱時間:05/17/2007 03:50:48 - 修訂: 7.7

Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# .NET 2003 標準版, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Office Word 2003, Microsoft Word 2002 Standard Edition

  • kbmt kbautomation kbhowtomaster KB316384 KbMtzh
意見反應