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

文章翻譯 文章翻譯
文章編號: 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) 網站:
與 Visual Studio 的 Microsoft Office 程式開發
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx

Word 在 Office (MSDN 線上文件)
http://msdn2.microsoft.com/en-us/library/aa201330(office.11).aspx

一個多個 Word (MSDN Online 文章)
http://msdn2.microsoft.com/en-us/library/aa201332(office.11).aspx

屬性

文章編號: 316384 - 上次校閱: 2007年5月17日 - 版次: 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
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:316384
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com