Makale Özeti

Word en çok kullanılan kelime işlemcidir. Word ile doküman yaratabilir, istediğimiz değişikleri ve formatları bu doküman üzerinde uygulayabilir ve bunu DOC dosyası olarak kaydedebiliriz. Bu dosyayı yazıcıdan çıkarabilir veya ek yaparak bir adrese e-mail olarak gönderebiliriz.

Makale

-----VB de Word------

“VB.NET”te WORD

Word en çok kullanılan kelime işlemcidir. Word ile doküman yaratabilir, istediğimiz değişikleri ve formatları bu doküman üzerinde uygulayabilir ve bunu DOC dosyası olarak kaydedebiliriz. Bu dosyayı yazıcıdan çıkarabilir veya ek yaparak bir adrese e-mail olarak gönderebiliriz. Ayrıca bu dosyaya çalışma anında dil denetimi  yaparak kelime yanlışlarını anında düzeltebiliriz.

VB projelerinde Wordü bir obje modeli olarak kullanmak için, bir referance eklemeliyiz. Bunun için Project menüsünden “Add Referance” seçeneğini seçerek COM sekmesinden ilgili obje modelini çift tıklayıp eklememiz ve OK tuşuyla seçmemiz yeterlidir. Örneğin Word XP için “Microsoft Word 10.0 Object Library” seçeneğini seçmemiz gerekmektedir.

 

Word objeleriyle ilgili program yapmak için, ilk olarak  bir değişken yaratmalıyız.

Dim WordApp As New Word.Application

 

Fakat bu değişken tek başına bir doküman açmaya veya yaratmaya yetmez. Bunun için doküman tipli obje değişkeni kullanılır. Diskte varolan bir Word dökümanını açmak için;

WordApp.Documents.Open("ornek.doc")

yazılır. Yeni bir doküman yaratmak için ise Add metodu çağrılır.SaveAs metoduyla da  yeni doküman saklanır;

Dim newDoc As New Word.Document newDoc isimli Yeni bir döküman değişkeni tanımlanıyor.

newDoc = WordApp.Documents.Add yeni döküman oluşturuluyor.

newDoc.SaveAs("My new Document") Bir isim verilerek saklanıyor.

Eğer doküman önceden saklanmışsa SaveAs yerine Save metodunu kullanırız.

 

Close Object

Dökümanı kapatıp uygulamadan çıkmak için kullanılan objedir. Aşağıdaki satır aktif dökümanı kapatır;

newDoc.Close([ByRef saveChanges As Object], [ByRef originalFormat As Object], _

[ByRef routeDocument As Object])

üç isteğe bağlı seçeneği vardır. SaveChanges argümanı  WDSaveOptions elemanıdır ve üç değeri vardır: wdDoNotSaveChanges, wdPromptToSaveChanges, or wdSaveChanges. Originalformat argümanı doküman saklanırken kullanılacak formatı belirler. WDOriginalFormat elemanıdır ve bunun da seçilebilir üç değeri vardır: wdOriginalDocumentFormat, wdPromptUser, or wdWordDocument. Son argüman ise dökümanın bir sonraki alıcıya yönlendirilip yönlendirilmeyeceğinin belirlendiği True/False

değeridir. Eğer doküman bir Routing Slip olarak mail eki olmayacaksa, bu argümanı dikkate

almayabiliriz.

 

Quit Object

Yapısı Close objesi gibidir. Quit seçeneğinin Close objesinden farkı close sadece dökümanı saklar Quit ise Word belgesini kapatır.

 

Selection Object

Word belgesinde seçilmiş olan alanlar ile ilgili işlemlerde kullanılır. Eğer hiçbir alan seçili değilse kürsörün bulunduğu nokta için işlem gerçekleştirir. Ayrıca kürsörlere yön verme ve konumlanma işlemlerini de gerçekleştirebiliriz.

 

Home-End Tuşu

WordApp.Selection.EndKey([Unit],[Extent]) Klavyedeki END tuşu

WordApp.Selection.HomeKey([Unit],[Extent]) Klavyedeki HOME tuşu

Unit argümanı için WdUnits kullanılır ve seçenekleri şunlardır.

WdLine: Satırın başına/sonuna gider. Default değerdir.

WdStory: Dökümanın başına/sonuna gider.

WdColumn: Sütunun başına/sonuna gider. Tablolarda kullanılır.

WdRow: Satırın başına/sonuna gider. Tablolarda kullanılır.

 

Extent argümanı seçili alanlarla ilgili işlemler içindir. Bu argüman içinWdMovementType kullanılır ve seçenekleri şunlardır.

WdMove: Seçili alanı taşır. Örnek olarak WdLine ile kullanırsak seçili alanı satırın başına/sonuna taşır.

WdExtent: Belli alanı seçer. Biz WdStory ve ile kullanırsak CTRL+SHIFT+(HOME/END) tuşlarıyla aynı işlemi gerçekleştirir.

WordApp.Selection.EndKey(Word.WdUnits.wdLine, Word.WdMovementType.wdMove)

WordApp.Selection.HomeKey(Word.WdUnits.wdStory, Word.WdMovementType.wdExtent)

 

Ok Tuşları

WordApp.Selection.MoveLeft([Unit], [Count],[Extent]) Klavyedeki SolOk tuşu

WordApp.Selection.MoveRight([Unit], [Count],[Extent]) Klavyedeki SağOk tuşu

WordApp.Selection.MoveUp([Unit], [Count],[Extent]) Klavyedeki Yukarı tuşu

WordApp.Selection.MoveDown([Unit], [Count],[Extent]) Klavyedeki Aşağı tuşu

Extent argümanı yukardakinin aynısıdır. Unit argümanı için ise WdUnit farklı seçenekler sunmaktadır. MoveLeft ve MoveRight için ;

WdCharacter: Count sayısı kadar karakter değiştirir. Default değeridir.

WdWord: Count sayısı kadar kelime değiştirir.

WdSentence: Count sayısı kadar cümle değiştirir.

WdCell: Count sayısı kadar hücre değiştirir. Tablolarda kullanılır.

WordApp.Selection.MoveLeft(Word.WdUnits.wdCharacter, 4, Word.WdMovementType.wdMove)

WordApp.Selection.MoveRight(Word.WdUnits.wdWord, 2, Word.WdMovementType.wdExtend)

 

MoveUp ve MoveDown için ise;

WdLine: Count sayısı kadar satır değiştirir.

WdParagraph: Count sayısı kadar paragraf  değiştirir.

WdWindow: Count sayısı kadar pencere değiştirir.

WdScreen: Count sayısı kadar ekran değiştirir.

WordApp.Selection.MoveDown(Word.WdUnits.wdWindow, 1, Word.WdMovementType.wdExtend)

WordApp.Selection.MoveUp(Word.WdUnits.wdLine, 6, Word.WdMovementType.wdMove)

 

Move

WordApp.Selection.Move([Unit], [Count]) Taşıma

Bu komut, Unit ile belitilen formatta Count sayısı kadar taşıma gerçekleştirir. Örneğin  aşağıdaki örnekte; kürsör bulunduğu koumdan 3 kelime öteye gider ve orada konumlanır.

WordApp.Selection.Move(Word.WdUnits.wdWord, 3)

 

 

Range Object

Dökümanın herhangi bir noktasında başlangıç ve bitiş noktalarını belirterek seçme işlemini gerçekleştirebiliriz. Eğer başlangıç ve bitiş noktalarını aynı yaparsak kürsörü o noktaya konumlandırmış oluruz.

Dim rngdoc As Word.Document

rngdoc = WordApp.Documents.Open("c:\deneme.doc")

Dim rng As Word.Range

rng = rngdoc.Range(0, 15) rngdoc.range(Başlangıç, Bitiş)

rng.Select() Bu komut ile 0-15 karekter arasında seçme yapılır

(Kadir Erdogan=13 )+ (Sayfa sonlandırma=1)+(M=1) = 15

Bütün dökümanı seçmek için,

rng = rngdoc.Range(0, rngdoc.Characters.Count) Klavyedeki CTRL+A

komutunu yukarıdaki benzer satırla değiştirmek veya

rngdoc.Range.Select()Klavyedeki CTRL+A

komutu yazmak yeterli olacaktır.

 

Sentences-Paragraph

Range komutuyla cümle cümle seçmek te mümkündür.

4.cümlenin başlangıcından 5.cümlenin sonuna kadar rng.Select komutunu kullanarak seç.

rng = rngdoc.Range(rngdoc.Sentences.Item(4).Start, rngdoc.Sentences.Item(5).End)

rng.Select()

Sentences” yerine kullanılacak “Paragraph” komutuyla paragraf seçmek de mümkün.

 

Formatlama

Range komutuyla seçilen parçaların formatları değiştirilebilir.

seçilmiş parçamızı 14 puntolu Arial yazıtipine sahip ortalanmış şekle dönüştürüyoruz.

With rng

        .Font.Size = 14

        .Font.Name = "Arial"

        .ParagraphFormat.Alignment =Word.WdParagraphAlignment.wdAlignParagraphCenter

End With

 

Metin Ekleme

aşağıdaki kodlar 0-15 karakterlerini siler ve yerine Yeni Metin yazar.

Dim str As String = "Yeni Metin"

Dim rng As Word.Range = rngdoc.Range(0, 15)

rng.Text = str

rng.Select()

Eğer Range(0, 15) yerine Range(15, 15) yazsaydık metni araya ekleyecekti.

 

Collapse

rng.Collapse([Direction])

Direction argümanı için WdCollapseDirection kullanılır ve 2 seçeneği mevcuttur:

WdCollapseStart: Default değerdir. Seçilen alanın başına konumlanır.

WdCollapseEnd: Seçilen alanın sonuna konumlanır.

Dim str As String = " deneme"

Dim rng As Word.Range = _

rngdoc.Paragraphs.Item(2).Range

rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)

rng.Text = str

rng.Select()

Yukarıdaki iki “deneme” eklenmiş yazıdan soldakinde wdCollapseEnd sağdakinde ise wdCollapseStart kullanılmıştır. Marmara 2. paragrafı temsil etmektedir.

 

 

BookMark Object

Bookmark objesi Selection ve Range objeleri gibi doküman içerisindeki başlangıç ve bitiş değerlerine göre işlem yapar.Biz Bookmarkı dokümanın herhangi bir yerine işaret koymak istediğimiz zaman kullanırız. Bir Bookmarkı doküman içerisindeki isimlendirilmiş bir yer olarak düşünebiliriz.

 

Bookmark oluşturma

Friend Sub CreateBookmarks()

    Dim bmkdoc As Word.Document

    bmkdoc = WordApp.Documents.Open("c:\deneme.doc")

    Dim rng As Word.Range

    Dim bookMk As Word.Bookmark

    WordApp.ActiveWindow.View.ShowBookmarks = True Gri I-Barın görünmesini sağlar.

    rng = bmkdoc.Paragraphs.Item(3).Range

    3.paragraj için yeni bir bookmark oluşturuyor.rngdoc.Bookmarks.Add(Name, [Range])

    bookMk = bmkdoc.Bookmarks.Add("bookMk", DirectCast(rng, Word.Range))

    messagebox ile oluşturulan bookMk isimli Bookmark ekrana gösteriliyor.

    MessageBox.Show("bookMk Text: " & bookMk.Range.Text, "bookMk içeriği")

    rng.InsertBefore(Text)--> Bookmarkın önüne eklenecek text metin belirtiliyor.

    rng.InsertBefore("**bookMk öncesine Ekle**")

    rng.InsertAfter(Text)--> Bookmarkın sonuna eklenecek text metin belirtiliyor.

    rng.InsertAfter("**bookMk sonrasına Ekle**")

    bookMk.Select() 3.paragrafı seçer.

End Sub

 

 

 

Dikkat ettiyseniz **bookMk öncesine Ekle** metni [ barının hemen sağına  **bookMk sonrasına Ekle** metni ise ] barının sonrasına gelmiştir.

Bookmark listeleme

Aşağıdaki program parçası oluşturulan bookmarkları ekrana msgbox ile gösteriyor.

Friend Sub ListBookmarks()

    Dim bmrk As Word.Bookmark

    For Each bmrk In bmkdoc.Bookmarks

        MsgBox("Name:" & bmrk.Name & "Contents:" & bmrk.Range.Text)

    Next

End Sub

 

 

Bookmark değiştirme

Var olan bir bookmarkı ismi ile çağırıp içindeki metinleri değiştirebiliriz.

Friend Sub ReplaceBookmarkText(ByVal BookmarkName As String, ByVal NewText As String)

    Dim bmkdoc As Word.Document

    bmkdoc = WordApp.Documents.Open("c:\deneme.doc")

    If bmkdoc.Bookmarks.Exists(BookmarkName) Then

        Dim rng As Word.Range = bmkdoc.Bookmarks.Item(BookmarkName).Range

        rng.Text = NewText

        bmkdoc.Bookmarks.Add(BookmarkName, DirectCast(rng, Word.Range))

    End If

End Sub

 

Doküman içinde Arama Yapma (Find Object)

Arama işlemi Find objesi yapılmaktadır. Find objesi ise hem Selection hem de Range objesinin bir elemanıdır. Böylelikle iki farklı şekilde arama yapma imkanı vardır.

 

Selection object ile arama yapma

Aşağıdaki program parçasında Text isimli string alana girilen metin aranıyor.

Public Sub FindInSelection(ByVal Text As String)

    WordApp.Documents.Open("c:\deneme.doc")

    Dökümanın en başına gidiliyor.

    WordApp.Selection.HomeKey(Word.WdUnits.wdStory, Word.WdMovementType.wdMove)

    Dim strFind As String = Text

    Dim fnd As Word.Find = WordApp.Selection.Find

    fnd.ClearFormatting() Önceden yapılmış aramayla oluşan formatları temizler.

    fnd.Text = strFind

    Execute() komutu Text string ifadesini arar. Ve True veya false olarak döner.  

    Eğer Text ifadesi bulunmuşsa True bu ifade dokümanda yoksa False değerini 

    döndürür.

    If fnd.Execute() Then

        MessageBox.Show(Text & " Bulundu!")

    Else

        MessageBox.Show(Text & " Bulunamadı!")

    End If

 

End Sub

 

Range object ile arama yapma

Range ile daha kısa alanlarda arama yapma imkanına sahibiz.

Örneğin aşağıdaki program parçasında 3. paragrafta Text isimli string ifadeyi arıyor.

Public Sub FindInRange(ByVal Text As String)

    Dim srcdoc As Word.Document

    srcdoc = WordApp.Documents.Open("c:\deneme.doc")

    Dim rng As Word.Range = srcdoc.Paragraphs.Item(3).Range

    Dim fnd As Word.Find = rng.Find

    fnd.ClearFormatting()

    fnd.Text = Text

    If fnd.Execute() Then

        MessageBox.Show(Text & " Bulundu!")

    Else

        MessageBox.Show(Text & " Bulunamadı!")

    End If

End Sub

 

Metin Değiştirme

Metin değiştirmenin pek çok yolu vardır. Bu yollardan biri Execute( ) komutunu kullanmaktır.

WordApp.Selection.Find.Execute([ByRef Replace As Object])

Bu komutun pek çok argümanı vardır. Metin değiştirmede Replace argümanı kullanılır. Bu argüman için WdReplace kullanılır ve şu seçenekler sunar:

wdReplaceAll: Tüm bulunanları değiştirir.

wdReplaceNone: Bulunanlardan hiçbirini değiştirmez.

wdReplaceOne: Sadece ilk bulunanı değiştirir.

Friend Sub SearchAndReplace(ByVal srcText As String, ByVal rpcText As String)

    WordApp.Documents.Open("c:\deneme.doc")

    WordApp.Selection.HomeKey(Word.WdUnits.wdStory, Word.WdMovementType.wdMove)

    With WordApp.Selection.Find

        .ClearFormatting()

        .Text = srcText

        With .Replacement

            .ClearFormatting()

            .Text = rpcText

        End With

        .Execute(Replace:=Word.WdReplace.wdReplaceAll)

    End With

End Sub

 

Yazdırma (Printing)

Yazdırma işlemi kelime işlemci programlar için önemli bir noktadır. Biz istersek dokümanın tamamı istersek seçtiğimiz bir kısmı print yapabiliriz.

WordApp.PrintPreview = True  yaparak yazdırmadan önce önizleme yapabiliriz.

 

Printout Method

Print işleminin yapıldığı komuttur. WordApp.PrintOut() yazarsak aktif olan dokümanın hepsini yazdırır. Bu komutun pek çok argümanı vardır. En çok kullanılan argümanlar aşağıda belirtilmiştir:

Background: True yapılırsa Wordün dokümanı print etmesi için izin verir.

Append: OutputFileName argümanı ile birlikte kullanılır.True yapılırsa OutputFileName argümanı ile oluşturulan dosyaya yazar.

Range: WdPrintRange kullanılır : wdPrintAllDocument, wdPrintCurrentPage, wdPrintFromTo, wdPrintRangeOfPages, veya wdPrintSelection seçeneklerinden biri seçilir.

OutputFileName: Eğer PrintToFile argümanı True ise belirtilen alanda ve isimde bir dosya yaratır.

From: Range wdPrintFromTo olduğu zaman başlangıç sayfasını verir.

To: Range wdPrintFromTo olduğu zaman bitiş sayfasını verir.

Item: Yazdırılan itemdır. WdPrintOutItem içindeki seçeneklerden biri seçilir ve kullanılır: wdPrintAutoTextEntries, wdPrintComments, wdPrintDocumentContent, wdPrintKeyAssignments, wdPrintProperties, wdPrintStyles

Copies: Yazdırılacak itemın kopya sayısını verir.

Pages: Yazdırılacak Sayfa numaraları belirtilir. Genellikle virgülle ayrılır. Örneğin “2,4-6” yazarsak 2,4,5 ve 6. sayfalar yazdırılır.

PageType: Yazdırılacak sayfanın tipi belirtilir. WdPrintOutPages içindeki sabitlerden biri seçilerek kullanılır: wdPrintAllPages, wdPrintEvenPagesOnly, wdPrintOddPagesOnly

PrintToFile: True yaparsak yazdırılacak itemı Printera bir dosya olarak göndeririz. Bu dosyanın adı OutputFileName ile belirtilir.

Collate: dokümanın birden fazla kopyası yazıldığı zaman kullanılır.True yaparsak bir sonraki kopyadan önce Printerın bütün sayfalarını yazdırırız.

FileName: Sadece Application Object ile kullanılabilir. dosya adı ve yolu verilen doküman yazdırılır. Eğer bu argüman kullanılmamışsa aktif doküman yazdırılır.

ManuelDuplexPrint: True yapılırsa Manual olarak kağıdı arkalı önlü yazdırır.

Friend Sub PrintOutDoc()

    WordApp.PrintOut( _

     Background:=True, _

     Append:=False, _

     Range:=Word.WdPrintOutRange.wdPrintCurrentPage, _

     Item:=Word.WdPrintOutItem.wdPrintDocumentContent, _

     Copies:=2, _

     Pages:=1, _

     PageType:=Word.WdPrintOutPages.wdPrintAllPages, _

     PrintToFile:=False, _

     Collate:=True, _

     ManualDuplexPrint:=False)

End Sub

 

 

Tablolar

Tables Documents, Selection, ve Range objelerinin bir elemanıdır. Yani istediğimiz yerden tablolar yaratabiliriz.

 

Dim rng As Word.Range =doc.Range(0, 0)

doc.Tables.Add(rng, 3, 4)

Yukarıdaki kodlar ile aktif dokümanın en başına 3 satır 4 sütunluk bir tablo oluşturmuş oluyoruz.

 

Dim tbl As Word.Table = doc.Tables(1)

tbl.Range.Font.Size = 8

tbl.Style = "Table Grid 8"

Table objesi formatı değiştirebileceğimiz bir Range özelliğine sahiptir. Style özelliği ise tablonun sitilini belirlememizi sağlar.

 

Cell

tbl.Cell(Row, Column)

Belirtilen Row ve Column değerlerinde bulunan hücrede işlem yapmamızı sağlar. Aşağıdaki kodda Cell ile tablonun ilk satırına ve ilk sütununa konumlanıyor ve içeriğini ve hizalama formatını değiştiriyor.

 

With tbl

 With .Cell(1, 1).Range

  .Text = "Name"

  .ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight

 End With

End With

 

Rows ve Columns

Biz tablolara satır ve sütun ekleyebilriz.

tbl.Rows.Add()

tbl.Column.Add()

 

 

 

Word güçlü bir kelime işlemci. Bu yazıda sadece VB.Net ile Wordun kullanımı konusunda genel bir anlatım gerçekleştirdim.

 

Başka yazılarla görüşmek üzere...