Bu örnekte C# tan gönderilen verileri Word Şablonunda oluşturulan adres mektup birleştirme Alanı eklemeyi  göstereceğim.

Kullandığım program Visual Studio 2015 ve office 2010. Office 2016 ile yaptığım denemelerde başarılı olamadım. Office 2016, visual studio 2015 ile uyumlu değilmiş. O yüzden daha eski office versiyonunu tercih ettim.

Visual studiodaki TEXTBOX alanlarını word dosyası içinde göstermek için Word ün MERGEFIELD özelliğinden yararlandım.

Başlamak için öncelikle bir WORD şablon dosyası (.dot dosyası) olan bir şablon yapmamız gerekiyor.

 

 Word 2010 da EKLE sekmesi altında HIZLI PARÇALAR menüsü altında ALAN ekleyeceğiz.

açılan kısımdan MERGEFIELD seçeceğiz ve o alana isim vereceğiz.

Sonra şablonumuzu kaydedebiliriz. .dot uzantılı olmasına dikkat edelim. Ben şablonu D: sürücüsü içine kaydetttim ve kod da o şekilde yazdım.

Şimdi Visual Studio yu açarak yeni C# Form uygulaması oluşturarak formumuzu tasarlayabiliriz.

 

Kod kısmına geçtiğimizde öncelikle WORD başvurusunu eklemeliyiz.

Word 2010 kullandığım için Microsoft Office 14.0 Object Library i ekliyorum.

seçimi yapıp TAMAM a bastığımızda başvırılara eklendiğini görebiliriz.

Öncelikle Namesprace içine referansı ekleyelim.

using Word = Microsoft.Office.Interop.Word;

ardından Word belgesi eklediğimiz başvuru ile başlatılır.

Object oMissing = System.Reflection.Missing.Value;
Object oTrue = true;
Object oFalse = false;
Word.Application oWord = new Word.Application();
Word.Document oWordDoc = new Word.Document();

 oluşturduğumuz belgenin görülebilir olması için

oWord.Visible = true;

 Oluşturduğumuz şablonun yolunu gösterelim

Object oTemplatePath = "d:\\staj.dot";

 ardından şablon yolunu Word belgesine iletelim.

oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);

 Şimdi belgedeki tüm birleştirme alanlarını sayalım, böylece belgedeki konumlarına erişebildiğimiz alan adlarına ulaşabiliriz. Konuma gerçekte erişemiyoruz, ancak referanslarını istiyoruz, bu yüzden metinlerini ayarlayabilir ve belgeyi otomatik olarak doldurabiliriz. Tüm birleştirme alanlarına ulaşmak için foreach döngüsünü kullandım.

foreach (Word.Field myMergeField in oWordDoc.Fields)
{
    iTotalFields++;
    Word.Range rngFieldCode = myMergeField.Code; 
    String fieldText = rngFieldCode.Text;
     
    if (fieldText.StartsWith(" MERGEFIELD"))
    {
        Int32 endMerge = fieldText.IndexOf("\\");
        Int32 fieldNameLength = fieldText.Length - endMerge;
        String fieldName = fieldText.Substring(11, endMerge - 11);
        fieldName = fieldName.Trim(); 
        if (fieldName == "Name")
        {
            myMergeField.Select(); 
            oWord.Selection.TypeText(txt_name.Text);
        }
        }
}

 Birleşme alanının MERGEFIELD <Mergefield name> ile başladığını bilmeniz gerekli. Örneğimizdeki tüm alanlar bu MERGEFIELD \\ NAME gibidir.

 Uygulamayı çalıştırdığımızda ve uygulamadaki tüm metin kutularını doldurduğumuzda ve Worde Aktar butonuna bastıktan sonra, belgenin tamamlandığını göreceksiniz.

 

 KODLARIN TAMAMI

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Linq;
using System.Text;
using Word = Microsoft.Office.Interop.Word;


namespace WordDemo
{
    public partial class frm_main : Form
    {
        int iTotalFields = 0;
        public frm_main()
        {
            InitializeComponent();
        }
        private void btn_ok_Click(object sender, EventArgs e)
        {
            Object oMissing = System.Reflection.Missing.Value;
            Object oTrue = true;
            Object oFalse = false;
            Word.Application oWord = new Word.Application();
            Word.Document oWordDoc = new Word.Document();
            oWord.Visible = true;
            Object oTemplatePath = "d:\\staj.dot";
            oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
            foreach (Word.Field myMergeField in oWordDoc.Fields)
            {
                iTotalFields++;
                Word.Range rngFieldCode = myMergeField.Code;
                String fieldText = rngFieldCode.Text;

                if (fieldText.StartsWith(" MERGEFIELD"))
                {
                    Int32 endMerge = fieldText.IndexOf("\\");
                    Int32 fieldNameLength = fieldText.Length - endMerge;
                    String fieldName = fieldText.Substring(11, endMerge - 11);
                    fieldName = fieldName.Trim();
                    if (fieldName == "okulno")
                    {
                        myMergeField.Select();
                        oWord.Selection.TypeText(txt_name.Text);
                    }
                    if (fieldName == "sınıf")
                    {
                        myMergeField.Select();
                        oWord.Selection.TypeText(txt_address.Text);
                    }     
                    if (fieldName == "alan")
                    {
                        myMergeField.Select();
                        oWord.Selection.TypeText(txt_tel.Text);
                    }
                    if (fieldName == "ad")
                    {
                        myMergeField.Select();
                        oWord.Selection.TypeText(txt_odetails.Text);
                    }
                }
            }
        }
        private void btn_exit_Click(object sender, EventArgs e)
        {
            System.Windows.Forms.Application.Exit();
        }
    }
}