Bu ilk makalemiz de Powershell ile Microsoft Word üzerine çeşitli metinler gönderirken font ve stillerini nasıl değiştirebiliriz hakkında bilgi vereceğim. Powershell ile Microsoft Word uygulamasının beraber kullanmak için Powershell içerisinde COM Objesini yaratmamız gerekmektedir. Ben bu yazımız içerisinde Word 2013 versiyonu kullanıyor olacağım. Kullanmış olduğum methodlar sizin Office versiyonunuza göre değişiklik gösterebilir. COM Objeler için daha fazla bilgi almak isterseniz aşağıdaki adresten bakabilirsiniz.
http://en.wikipedia.org/wiki/Component_Object_Model
Powershell içerisinde COM Objesi yaratmak için aşağıdaki adımlar izlenir.
Herhangi bir COM Objesi yaratmak için Powershell içerisinde kullanacağımız Cmdlet “New-Object”‘. Office Word uygulamasını çağırmak için ise “New-Object” cmdlet içerisinde –ComObject parametresine Word.Application göndermektir. Aşağıdaki örnekte bu işlemi bir değişkene atayarak yapıyorum.
$MSWord = New-Object -ComObject Word.Application
Resim-1
COM Obje nesnemi oluşturduktan sonra etkin olsa bile bir konuyu unutmayalım, process oluşuyor fakat arka tarafta “Visible” değerini “$false” olduğu için uygulamayı görmemekteyiz. Processler üzerinden kontrol ediyorum uygulamam başlatılmış fakat ben görmemekteyim.
Resim-2
Eğer Word uygulamasını oluşturduktan sonra, gözükmesini istiyorsanız,
$MSWord.Visible = $true
Yukarıdaki şeklinde “Visible” değerini True olarak yazmanız gerekmektedir.
$MSWord = New-Object -ComObject Word.Application
$MSWord.Visible = $true
Resim-3
Artık, Word uygulamasını görebiliriz. Ama aslında dikkat ettiyseniz yazmaya başlamak için herhangi bir belge oluşturmadık. Bunun için “Documents.Add()”yöntemini çağırarak gerçekleştireceğiz. “$Documents” adında bir değişken oluşturdum ve “$MsWord.Documents.Add()” yöntemini değişkene atayıp yazımızın ilerleyen kısmında kullanıyor olacağım. “Selection” yöntemini seçerek yazı yazmaya başlayabilirsiniz.
$MSWord = New-Object -ComObject Word.Application
$MSWord.Visible = $true
$Document = $MSWord.Documents.Add()
$Selection = $MSWord.Selection
Resim-4
Word İçerisine Yazı Yazmak
Word içerisine yazı yazmak için “TypeText()” yönteminin içerisine değer göndermeniz yeterlidir.
$Selection.TypeText (“Merhaba Hasan”)
Resim-5
Paragraf İle Beraber Çalışmak
Powershell içerisinden göndereceğiniz metinleri paragraf kullanarak ekleyebilirsiniz. Paragraf eklemek için kullanacağımız yöntem (Method) ise TypeParagraph() çağırmamız yeterli olacaktır. Çağırdığımız bu yöntem ile biz Word içerisinde yeni bir paragraf oluşturmamızı sağlayacaktır. TypeText() yöntemi ile kullanım örneği aşağıdaki gibidir.
$Selection.TypeParagraph()
$Selection.TypeText(“Merhaba Hasan”)
Resim-6
8 ve 9 satırda dikkat ettiyseniz 2 kez “TypeParagraph()” yöntemi çağırılmış ve Word içerisinde iki kez paragraf bırakılmıştır.
Word İçerisindeki Stiller İle Çalışmak
Word içerisindeki hazır stilleri kullanarak gönderdiğiniz metinlerin görünüşlerini değiştirebilirsiniz. Bu kısımda kullanacağımız yöntem ise ($Selection.Style = “Yazıstiligiriniz“) şeklinde belirleyebiliyoruz. Word üzerindeki gördüğümüz stiller,
Resim-7
Yazmamız gereken sadece kullanmak istediğimiz stilin adını “$Selection.Style = “Yazıstiligiriniz”)
içerisine yazmak.
$Selection.Style = “Heading 1”
$Selection.TypeText(“Active Directory Audit ve Raporlama”)
$Selection.TypeParagraph()
Resim-8
Word İçerisindeki Yazı Tiplerini Keşfetmek
Bu kısım içerisinde aşamalı olarak yazı tipleri ( bold, italic ) ve son aşamada ise fontların renk değişimini göz atıyor olacağız.
“$Selection.Font” kullanarak yazı tiplerini görebilirsiniz. Dikkat edin “Bold,İtalic” tam bir sayı ile ifade ediliyor. Yani ben Word içerisine göndereceğim değer “1” olarak belirlersem o değerim “Bold” olarak ayarlanacaktır. Aynı şekilde “Italic” içinde bu senaryo geçerlidir.
Resim-9
$Selection.Font.Bold = 1
$Selection.TypeText(‘Bu yazımız Bold olarak ayarlanmıştır.’)
$Selection.TypeParagraph()
$Selection.Font.Bold = 0
$Selection.Font.Italic = 1
$Selection.TypeText(‘Bu yazımız Italic olarak ayarlanmıştır.’)
Resim-10
Not: Yukarıda “$Selection.Font.Bold = 0” değerinin belirtilmesinin sebebi sıradaki satırda gönderilen değerin “Bold” olarak ayarlanmamasıdır.
Son olarak Word içerisine gönderdiğimiz metinleri renklerini değiştirmek için yapacağımız işlemlerden bahsetmek istiyorum.
Yukarıda “$Selection.Font” çalıştırdığımız zaman “Bold, Italic” değerlerini gördük ve bunları değiştirmekten bahsettik. Listelenen değerler içerisinde “Color” değerini değiştirerek Font renkleri ile oynayabilirsiniz. Yukarıdaki örnekte Color değerinin karşısında “wdAutomaticColor” yazmaktadır. Yapmamız gereken sadece bu değeri değiştirmek. Buraya gelecek değerleri listelemek için yazmanız gereken;
[enum]::GetNames([microsoft.office.interop.word.wdcolor])
Resim-11
Yazı renklerini değiştirmek için,
$Selection.Font.Color = ‘wdColorSkyBlue’
$Selection.TypeText(‘Yazımız renk olarak <wdColorSkyBlue> ayarlanmıştır.’)
$Selection.TypeParagraph()
$Selection.Font.Color = ‘wdColorRed’
$Selection.TypeText(‘Yazımız renk olarak <wdColorRed> ayarlanmıştır.’)
Resim-12
Powershell ile Word içerisinde gördüğünüz gibi birçok işlemler yaptık. Word üzerinde yapılan bu işlemleri kaydetmek kulağa ne kadar hoş geliyor? Hatırlarsanız, yazımızın başında “$Document” adında bir değişken oluşturmuş ve onu yazımızın ilerleyen kısmında kullanacağımda bahsetmiştim. Evet $Document değişkeni içerisinden “SaveAs” yöntemini (method) kullanarak bunu yapmamız mümkün. Bunun öncesinde bu “SaveAs” methodu iki adet parametre göndermemiz gerekmektedir. Bunlar dosya yolu ve dosyanın kayıt edilen formatı olacaktır. Word üzerinden bildiğimiz gibi Farklı Kaydet yaparak birçok format ile kaydetme şansımız mevcut. Bu formatları listelemek için;
[Enum]::GetNames([microsoft.office.interop.word.WdSaveFormat])
Resim-13
Gördüğümüz gibi yukarıdaki sonuçta birçok format karşımıza çıkmaktadır. Kaydetmek istediğiniz formatın adını yazarak işlemi tamamlayabilirsiniz. Artık aşağıdaki kodu kullanarak dosyanızı kaydedebilirsiniz.
$SaveLocation = ‘C:\Users\Hasan GURAL\Desktop\PowershellwithWord.doc’
$Document.SaveAs([ref]$SaveLocation,[ref]$SaveFormat::wdFormatDocument)
$MSWord.Quit()
Resim-14
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar