Visual C kullanarak yeni belge oluşturmak için Microsoft Word'u otomatikleştirme #

Bu makalenin Microsoft Visual Basic .NET sürümü için bkz.

Özet

Bu adım adım makalede, Microsoft Visual C# 2005 veya Microsoft Visual C# .NET'ten Otomasyon kullanarak Microsoft Word'de yeni bir belgenin nasıl oluşturulacağı açıklanır.

Örnek Kod

Bu makaledeki örnek kod aşağıdakilerin nasıl yapılacağını gösterir:

  • Metin ve biçimlendirme içeren paragraflar ekleyin.
  • Belge içindeki çeşitli aralıklara göz atın ve bunları değiştirin.
  • Tablolar ekleyin, tabloları biçimlendirin ve tabloları verilerle doldurun.
  • Grafik ekleyin.

Visual C# 2005 veya Visual C# .NET'ten Otomasyon kullanarak yeni bir Word belgesi oluşturmak için şu adımları izleyin:

  1. Microsoft Visual Studio 2005 veya Microsoft Visual Studio .NET'i başlatın.

  2. Dosya menüsünde Yeni'ye ve ardından Proje'ye tıklayın. Proje Türleri'nin altında Visual C# Projeleri'ne ve ardından Şablonlar'ın altında Windows Uygulaması'nı tıklatın. Form1 varsayılan olarak oluşturulur.

    Not Visual Studio 2005'te , Visual C#Projeleri yerine Visual C# öğesine tıklayın.

  3. Microsoft Word Nesne Kitaplığı'na başvuru ekleyin. Bunu yapmak için şu adımları uygulayın:

    1. Proje menüsünde Başvuru Ekle'ye tıklayın.
    2. COM sekmesinde, Microsoft Word Nesne Kitaplığı'nı bulun ve Seç'e tıklayın.

    Not Visual Studio 2005'te Seç'e tıklamanız gerekmez.

    Not Microsoft Office 2003, Birincil Birlikte Çalışma Derlemelerini (PIA) içerir. Microsoft Office XP PIA içermez, ancak indirilebilir.

    1. Seçimlerinizi kabul etmek için Başvuru Ekle iletişim kutusunda Tamam'a tıklayın. Seçtiğiniz kitaplıklar için sarmalayıcılar oluşturmanız istenirse Evet'e tıklayın.
  4. Görünüm menüsünde Araç Kutusu'nu seçerek Araç Kutusu'nu görüntüleyin ve form1'e bir düğme ekleyin.

  5. Düğme1'e çift tıklayın. Formun kod penceresi görüntülenir.

  6. Kod penceresinde aşağıdaki kodu değiştirin:

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

    Ile:

    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. Kod penceresinin en üstüne kaydırın. Kullanma yönergeleri listesinin sonuna aşağıdaki satırı ekleyin:

    using Word = Microsoft.Office.Interop.Word;
    using System.Reflection;
    
  8. Programı derlemek ve çalıştırmak için F5 tuşuna basın.

  9. Word Otomasyonu'na başlamak ve belgeyi oluşturmak için Düğme1'e tıklayın.

Kod tamamlandıktan sonra sizin için oluşturulan belgeyi inceleyin. Belge iki sayfa biçimlendirilmiş paragraf, tablo ve grafik içerir.

Şablon Kullanma

Tümü ortak biçimde olan belgeler oluşturmak için Otomasyon kullanıyorsanız, işlemi önceden biçimlendirilmiş bir şablonu temel alan yeni bir belgeyle başlatmanın avantajından yararlanabilirsiniz. Word Otomasyonu istemcinizle şablon kullanmanın, hiçbir şey kullanmadan belge oluşturmanın iki önemli avantajı vardır:

  • Belgelerinizde nesnelerin biçimlendirmesi ve yerleşimi üzerinde daha fazla denetime sahip olabilirsiniz.
  • Belgelerinizi daha az kodla oluşturabilirsiniz.

Şablon kullanarak, belgedeki tabloların, paragrafların ve diğer nesnelerin yerleşiminde ince ayarlamalar yapabilir ve bu nesnelere biçimlendirme ekleyebilirsiniz. Otomasyon'u kullanarak aşağıdaki gibi kodlarla şablonunuzu temel alan yeni bir belge oluşturabilirsiniz:

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

Şablonunuzda, Otomasyon istemcinizin belgedeki belirli bir konumdaki değişken metni aşağıdaki gibi doldurabilmesi için yer işaretleri tanımlayabilirsiniz:

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

Şablon kullanmanın bir diğer avantajı, çalışma zamanında uygulamak istediğiniz biçimlendirme stillerini aşağıdaki gibi oluşturup depolamanızdır:

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

veya

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

Başvurular

Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleleri görüntüleyin: