2013年6月9日日曜日

【.NET VB】Wordから文字を検索して場所を特定

※宣言部分
Imports Microsoft.Office.Interop

※処理部分
'Wordオブジェクトを生成
Dim xlApplication As Word.Application
xlApplication = New Word.Application()
 
'Wordオブジェクトのバージンを取得
txtMian.Text = txtMian.Text& xlApplication.Version & vbNewLine
 
'Word文書を開く
Dim wDoc As Word.Document
Dim wordName As String = "C:\Temp\sample1.docx"
wDoc = xlApplication.Documents.Open(wordName)
 
'Word文書の文数と文字数を取得する
txtMian.Text = txtMian.Text& "Sentences.Count:" & wDoc.Sentences.Count & vbNewLine
txtMian.Text = txtMian.Text& "Characters.Count:" & wDoc.Characters.Count & vbNewLine
 
'検索する文字をセット
Dim lCnt As Long = 0
Dim sText() As String = {"●", " ×", "▲"}
 
With xlApplication.Selection.Find
     For i = 0 To sText.Length - 1
          lCnt = 0
          '検索の処理機をクリア
          .ClearFormatting()
          '検索の文字列を設定
          .Text = sText(i)
          txtMian.Text = txtMian.Text & sText(i) & " で検索します。"& vbNewLine
          '検索を開始するの位置を先頭に設定
          xlApplication.Selection.SetRange(1, 1)
          '検索の実行
          Do Until .Execute = False
          '見つかった場合、検索対象の文字の場所を取得
          lCnt = lCnt + 1
          txtMian.Text = txtMian.Text & Space(3) & lCnt & " 回目みつかりました" & vbNewLine
           txtMian.Text = txtMian.Text & Space(3) & "ページ番号:" &xlApplication.Selection.Information(Word.WdInformation.wdActiveEndPageNumber) & vbNewLine
          txtMian.Text = txtMian.Text & Space(3) & "行番号:" &xlApplication.Selection.Information(Word.WdInformation.wdFirstCharacterLineNumber) & vbNewLine
          txtMian.Text = txtMian.Text & Space(3) & "文字目:" &xlApplication.Selection.Start & vbNewLine
          Loop
     Next i
End With
 
'文書を閉じる
wDoc.Close(False)
'アプリを閉じる
xlApplication.Quit()
 
'オブジェクトをクリアする
wDoc = Nothing
xlApplication = Nothing
 
txtMian.Text = txtMian.Text& "終了しました" & vbNewLine