Öncelikle makalenin içeriği ve Windows uygulamamız hakkında bir özet oluşturayım.
Proje: Windows Uygulaması
Programlama dili: C#.Net
Kullanılacak namespace: Microsoft.Office.Interop.Word
Yazacağımız classın adı: WordAuto.Cs
Uygulamadaki araçlar: 6 label, 6 textbox, 2 button, 1 errorprovider
Öncelikle tasarımımızın nasıl olması gerektiğini göstereyim. Yukarıda yazdığım özetteki araçları kullanıyoruz, errorprovider’ı eklemeyi unutmuyoruz.
Görüntüden de anlaşılacağı gibi, gerekli kısımları doldurduktan sonra oluştur butonuna tıkladığımızda bir Microsoft word projesi açılacak ve ilgili kısımlar transfer edilmiş olacak. Böylece kendimize hazır imza oluşturabilecek, ayrıca bir Windows uygulamasından word ile nasıl iletişim kurulabileceği örneklendirilmiş olacaktır.
Şimdi bu formumuzun kod kısmına geçiyoruz. Tüm kod açıklamaları satır aralarında olacaktır. Bu kodlamadan sonra, yukarıdaki özette bahsettiğim WordAuto.Cs classını yazacağız.
Formumuzun kodları:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace MSWordApp
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class WordForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button btnCreate;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.TextBox txtPlace;
private System.Windows.Forms.TextBox txtEmail;
private System.Windows.Forms.TextBox txtCompany;
private System.Windows.Forms.TextBox txtDesignation;
private System.Windows.Forms.TextBox txtAge;
private System.Windows.Forms.ErrorProvider errorProvider;
private IContainer components;
public WordForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
[STAThread]
static void Main()
{
Application.Run(new WordForm());
}
private void button2_Click(object sender, System.EventArgs e)
{
‘iptal buttonuna tıklandıgında formumuz kapanacak
Application.Exit();
}
private void btnCreate_Click(object sender, System.EventArgs e)
{
‘oluştur buttonuna tıkladıgımızda wordauto classımızdan nesnemizi üretecegiz
‘öncelikle degerlerimizi tutacak bir arraylist olusturuyoruz
WordAuto word = new WordAuto();
ArrayList array = new ArrayList();
bool filled = true;
if ( ( txtName.Text).Trim().Length.Equals(0) )
{
‘txtname textboxına girilecek ad değerini alırken
‘boş girilme esnasında uyarı verilmesini sağlıyoruz
‘bu işlemi diğer kontrollerde de kullanacagımızdan dolayı
‘tekrar tekrar kod aralıklarına acıklamasını yazıp karısıklık olusturmak ıstemıyorum
errorProvider.SetError(txtName,"cannot be empty" );
filled = false;
}
if( ( txtAge.Text ).Trim().Length.Equals(0) )
{
errorProvider.SetError( txtAge,"cannot be empty" );
filled = false;
}
if( ( txtDesignation.Text ).Trim().Length.Equals(0) )
{
errorProvider.SetError( txtDesignation,"cannot be empty" );
filled = false;
}
if( ( txtPlace.Text ).Trim().Length.Equals(0) )
{
errorProvider.SetError( txtPlace,"cannot be empty" );
filled = false;
}
if( ( txtEmail.Text ).Trim().Length.Equals(0) )
{
errorProvider.SetError( txtEmail,"cannot be empty" );
filled = false;
}
if( ( txtCompany.Text ).Trim().Length.Equals(0) )
{
errorProvider.SetError( txtCompany,"cannot be empty" );
filled = false;
}
if ( filled == true )
{
‘tüm kontrollerimize de aynı ıslemı yaptıktan sonra
‘arraylistimize gerekli değerleri yolluyoruz
‘son olarak olusturdugumuz word dosyasına arraylistimizin içeriğini aktarıyoruz
array.Insert(0,txtName.Text);
array.Insert(1,txtAge.Text);
array.Insert(2,txtDesignation.Text);
array.Insert(3,txtCompany.Text);
array.Insert(4,txtPlace.Text);
array.Insert(5,txtEmail.Text);
word.CreateFile(array);
}
}
}
}
İşin bu kısmı oldukça kolaydı. Kontrollerimize gerekli değerlerin girilmesini sağlayıp, boş bırakıldığı takdirde errorprovider yoluyla uyarı vermesini sağladık. Bunun yanında oluşturduğumuz arraylistin içeriğini de tanımlamış olup, oluştur butonuna tıklandıktan sonra arraylist içeriğinin worde nasıl aktarıldığını da görmüş olduk.
En başta belirtmiştim wordauto.cs isimli bir class oluşturacağımızı. Bu classtan yararlanarak word dosyası oluşturuyor ve içeriğini giriyorduk. Şimdi isterseiz wordauto.cs isimli classımızın kodlarını, ve kodların arasındaki açıklamaları yazalım.
using System;
using System.Collections;
‘kullanacagımız namespacei eklemeyı unutmuyoruz
using Word = Microsoft.Office.Interop.Word;
namespace MSWordApp
{
/// <summary>
/// Summary description for WordAuto.
/// </summary>
public class WordAuto
{
private Word.Application wordApp;
private Word.Document wordDoc;
public WordAuto()
{
//
// TODO: Add constructor logic here
//
}
public void CreateFile(ArrayList array)
{
‘create file isimli voidimizde word dosyamızın özelliklerini belirliyoruz
object missing = System.Reflection.Missing.Value;
object fileName = "normal.dot";
object newTemplate = false;
object docType = 0;
object isVisible = true;
‘word uygulamamızın hangi nesneden üretilecegini ve nasıl olusturulacagını belirtiyoruz
wordApp = new Word.ApplicationClass();
wordDoc = wordApp.Documents.Add(ref fileName, ref newTemplate, ref docType, ref isVisible);
wordApp.Visible = true;
wordDoc.Activate();
‘word dosyamız olusturulurken wındows formumuzdan gelecek degerlerin
‘nasıl bıcımlendırılecegını belırtıyoruz
‘gordugunuz gibi her degeri farklı paragraflara gonderıyoruz
‘boylece olusturucagımız ımza yada herhangı bır yazı daha duzenlı olusuyor
‘degerleri aktarırken, degerlerin hangi kontrolden gelecegini de belirtiyoruz
‘tabiki bu isimizi arraylistimiz yapiyoruz
‘zira tüm kontrollerimizden giden degerleri bir arraylistte kontrol altına almıstık
wordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
wordApp.Selection.Font.Bold = (int)Word.WdConstants.wdToggle;
wordApp.Selection.TypeText("Name : "+ array[0].ToString());
wordApp.Selection.TypeParagraph();
wordApp.Selection.TypeText("Age : "+ array[1].ToString());
wordApp.Selection.TypeParagraph();
wordApp.Selection.TypeText("Designation : " + array[2].ToString());
wordApp.Selection.TypeParagraph();
wordApp.Selection.TypeText("Company : " + array[3].ToString());
wordApp.Selection.TypeParagraph();
wordApp.Selection.TypeText("Place : " + array[4].ToString());
wordApp.Selection.TypeParagraph();
wordApp.Selection.TypeText("Email : "+array[5].ToString());
wordApp.Selection.TypeParagraph();
}
}
}
Tüm bu işlemlerden sonra formumuzu çalıştırın ve ad bölümünü doldurup diğer bölümleri boş bırakın. Sonra oluştur butonuna tıklayın. Böylece errorprovider’ın çalışıp çalışmayacağını görebilirsiniz. İşte buna bir örnek:
Gördüğünüz gibi ad alanını doldurup diğer alanları boş bıraktıktan sonra oluştur butonuna tıklarsak errorproviderlar beliriyor ve bize doldurmamız gereken noktaları işaretliyor.
Tüm alanları doldurduktan sonra oluştur dediğimizde word dosyasının açıldığını ve içeriğin iletildiğini görebilirsiniz. İşte sonuç:
Gördüğünüz gibi tüm içerik aktarıldı. Bunu yazınızın hangi bölgesine isterseniz aktarabilirsiniz.
Böylece Windows uygulamasıyla Microsoft word arasında hem iletişim kurmayı pekiştirdik hem de c#.net ile bir kolaylık daha öğrendik. Umarım yararlı olmuştur.
Farklı makalelerde görüşmek üzere. C# ve .Net ile kalın.