none
利用 Visual C# .NET 的自动化功能在 Word 中创建新文档 RRS feed

  • 问题

  • The type of namespace name 'Interop' does not exist in the namespace 'Microsoft.Office'(are you missing an assembly reference?
    报这个错是什么原因,我按下面的步骤操作的。

    要利用 Visual C# .NET 的自动化功能创建新的 Word 文档,请执行以下步骤: 
    启动 Microsoft Visual Studio .NET。在文件菜单上,单击新建,然后单击项目。在项目类型下,单击 Visual C# 项目,然后单击模板下的 Windows 应用程序。默认情况下会创建 Form1。 
    添加对 Microsoft Word 对象库的引用。为此,请按照下列步骤操作: 
    在项目菜单上,单击添加引用。 
    在 COM 选项卡上,找到 Microsoft Word 对象库,然后单击选择。 
    在添加引用对话框中单击确定,接受您的选择。如果系统提示您为选定的库生成包装,请单击是。 
    在视图菜单上,选择工具箱以显示工具箱,然后向 Form1 添加一个按钮。 
    双击 Button1。出现该窗体的代码窗口。 
    在代码窗口中,将以下代码 
    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(); 
    } 


    滚动到代码窗口的顶部。将下面的代码行添加到 using 指令列表的末尾: 
    using Word = Microsoft.Office.Interop.Word; 
    using System.Reflection; 


    以上是在微软的网站上看到的文章,照着做了,但是无法运行,报错: 

    The type of namespace name 'Interop' does not exist in the namespace 'Microsoft.Office'(are you missing an assembly reference?
    2010年1月4日 12:16

答案

  • 你好!
         解决方案资源管理器-》右击”引用“节点-》添加引用-》.NET选项卡-》找到Microsoft.Office.Interop.Word并选中-》确定
    周雪峰
    2010年1月4日 17:43
    版主
  • 要引用Office Object Library(mso.dll)。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2010年1月4日 22:58
    版主

全部回复

  • 你好!
         解决方案资源管理器-》右击”引用“节点-》添加引用-》.NET选项卡-》找到Microsoft.Office.Interop.Word并选中-》确定
    周雪峰
    2010年1月4日 17:43
    版主
  • 要引用Office Object Library(mso.dll)。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2010年1月4日 22:58
    版主