Automatizace aplikace Microsoft Word k vytvoření nového dokumentu pomocí jazyka Visual C #

Microsoft Visual Basic .NET verze tohoto článku naleznete v tématu

Souhrn

Tento podrobný článek popisuje, jak vytvořit nový dokument v Microsoft Wordu pomocí automatizace z Microsoft Visual C# 2005 nebo Microsoft Visual C# .NET.

Ukázkový kód

Ukázkový kód v tomto článku ukazuje, jak postupovat takto:

  • Vložte odstavce s textem a formátováním.
  • Umožňuje procházet a upravovat různé rozsahy v dokumentu.
  • Vkládejte tabulky, formátujte tabulky a naplňte tabulky daty.
  • Přidejte graf.

Pokud chcete vytvořit nový wordový dokument pomocí automatizace z Visual C# 2005 nebo Visual C# .NET, postupujte takto:

  1. Spusťte Microsoft Visual Studio 2005 nebo Microsoft Visual Studio .NET.

  2. V nabídce Soubor klikněte na Nový a potom klikněte na Project. V části Typy projektů klikněte na Projekty Visual C# a potom v části Šablony klikněte na Aplikace systému Windows. Formulář1 je ve výchozím nastavení vytvořen.

    Poznámka V sadě Visual Studio 2005 klikněte na Visual C# místo projektů Visual C#.

  3. Přidejte odkaz na knihovnu objektů aplikace Microsoft Word. Postupujte takto:

    1. V nabídce Projekt klikněte na Přidat odkaz.
    2. Na kartě COM vyhledejte Microsoft Word Object Library a klepněte na tlačítko Vybrat.

    Poznámka V sadě Visual Studio 2005 není nutné kliknout na tlačítko Vybrat.

    Poznámka Microsoft Office 2003 obsahuje primární sestavení vzájemné spolupráce (PIA). Sada Microsoft Office XP neobsahuje osobní údaje, ale je možné je stáhnout.

    1. Kliknutím na tlačítko OK v dialogovém okně Přidat odkazy potvrďte výběry. Pokud se zobrazí výzva k vygenerování obálek pro vybrané knihovny, klikněte na tlačítko Ano.
  4. V nabídce Zobrazení vyberte sadu nástrojů, aby se zobrazila sada nástrojů, a pak přidejte tlačítko do formuláře Form1.

  5. Poklikáte na Tlačítko1. Zobrazí se okno kódu formuláře.

  6. V okně kódu nahraďte následující kód:

    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    
    

    S:

    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. Posuňte se do horní části okna kódu. Na konec seznamu direktiv using přidejte následující řádek:

    using Word = Microsoft.Office.Interop.Word;
    using System.Reflection;
    
  8. Stisknutím klávesy F5 sestavte a spusťte program.

  9. Kliknutím na tlačítko1 spustíte automatizaci Wordu a vytvoříte dokument.

Po dokončení kódu zkontrolujte dokument, který jste vytvořili za vás. Dokument obsahuje dvě stránky formátovaných odstavců, tabulek a grafu.

Použití šablony

Pokud k vytváření dokumentů ve společném formátu používáte službu Automation, můžete využít výhod zahájení procesu pomocí nového dokumentu založeného na předformátované šabloně. Použití šablony s klientem služby Word Automation má oproti vytváření dokumentu dvě významné výhody:

  • Můžete mít větší kontrolu nad formátováním a umístěním objektů v dokumentech.
  • Dokumenty můžete vytvářet s menším množstvím kódu.

Pomocí šablony můžete vyladit umístění tabulek, odstavců a dalších objektů v dokumentu a také formátování těchto objektů. Pomocí služby Automation můžete vytvořit nový dokument založený na šabloně s následujícím kódem:

object oTemplate = "c:\\MyTemplate.dot";
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
ref oMissing, ref oMissing);

V šabloně můžete definovat záložky, aby klient služby Automation mohl vyplnit text proměnné v určitém umístění v dokumentu následujícím způsobem:

object oBookMark = "MyBookmark";
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";

Další výhodou použití šablony je, že můžete vytvářet a ukládat styly formátování, které chcete použít za běhu, a to následujícím způsobem:

object oStyleName = "MyStyle";
oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);

nebo

object oStyleName = "MyStyle";
oWord.Selection.set_Style(ref oStyleName);

Odkazy

Další informace najdete v článcích znalostní báze Microsoft Knowledge Base: