Elimizde bir word belgesi var ve programatik olarak içinde bazı kelimleri sayfa bazlı aramamız gerekiyor.
Önce word belgemizi Interop yardımıyla açıyoruz ve bir Range nesnesi alıyoruz.
_WORD = New Microsoft.Office.Interop.Word.Application
_Doc = _WORD.Documents.Open(OpenFileDialog1.FileName)
If _Doc IsNot Nothing Then
Dim rng As Microsoft.Office.Interop.Word.Range = _Doc.Range()
'............
Range nesnesin parametresiz vererek tüm içeriğe erişmiş oluyoruz.
Şimdi toplam sayfa sayısını bulalım.
Dim pages As Integer = rng.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages)
Bütün sayfaların başlangıç-bitiş değerlerini bir Dictionary nesnesinde tutalım
Dim list As New System.Collections.Generic.Dictionary(Of Integer, Integer())
İlk sayfanın başına gidelim ve en son Range değerini tutalım.
Dim what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage Dim which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute Dim nRange As Microsoft.Office.Interop.Word.Range Dim last As Integer = rng.End
Şimdi 2. sayfadan son sayfaya kadar ilerliyelim.
Dim oncekiSon As Integer = 0 For i = 2 To pages nRange = rng.GoTo(what, which, i) list.Add(i - 1, New Integer() {oncekiSon, nRange.End}) oncekiSon = nRange.End Next
Şimdi son sayfanın başlangıç ve bitişlerini ekliyelim.(Son Range değeri)
If list.Count > 0 Then list.Add(list.Keys.Last + 1, New Integer() {oncekiSon, last}) End If
Artık elimizdde bütün sayflar için Range(Başlangıç-Bitiş) değerleri mevcut.
Sayfaların içerikleri işleyebiliriz.
For Each key As Integer In list.Keys rng.SetRange(list(key)(0), list(key)(1)) Dim data As String = rng.Text 'key nolu sayfanın içeriği Next
Word dan çıkalım.
COM nesnelerimizi bırakmayı unutmayalım :)
_WORD.Quit(SaveChanges:=Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges) System.Runtime.InteropServices.Marshal.ReleaseComObject(_WORD) System.Runtime.InteropServices.Marshal.ReleaseComObject(_Doc) _WORD = Nothing _Doc = Nothing