|
ワードファイル(doc)を読み込むサンプル(VB.NET)

|
ワードファイル(doc)のテキストを読み込むサンプル(VB.NET)です。
Word.Applicationを使用しています。同時に複数のファイルを開けるように工夫しています。
また、Wordを終了させる処理を忘れるとタスクマネージャに残ってしまうので、
Form1_FormClosedで確実に終了するようにしています。
VB6で作ったサンプルをVB.NETに移植(コピペ)したのでVB6でも動きます。
★標準モジュール(Module1.vb)
Module Module1
Private objWordApp(9) As Object 'Word.Application ' ワードAP
Private objDocument(9) As Object 'Word.Document ' ドキュメント
' 関数名 : RdWordValue
' 返り値 : 成功時(True)
' 引き数 : strPath (i) : エクセルファイルPATH
' : strDt (o) : 収集したデータ
' 機能説明 : ワードデータ収集
' 備考 : 処理後ワード終了
Public Function RdWordValue(ByVal strPath As String, _
ByRef strDt As String) As Boolean
On Error GoTo ErrHandler
Const FUNCNAME = "RdWordValue"
RdWordValue = False
strDt = ""
' ワード起動
Dim xp As Integer
xp = GetWordObject()
If xp < 0 Then
Exit Function
End If
' ワード非表示
objWordApp(xp).Application.Visible = False
objWordApp(xp).Application.DisplayAlerts = False
' ブックを開く
objDocument(xp) = objWordApp(xp).Documents.Open(strPath, , True)
' テキスト選択
objDocument(xp).Select()
' Clipboardコピー
objDocument(xp).Range.Copy()
' Clipboardペースト
strDt = Clipboard.GetText()
' 成功
RdWordValue = True
' ワードの強制終了
TerminateWord(xp)
Exit Function
ErrHandler:
MsgBox("システムエラー : " & FUNCNAME & vbCrLf & Err.Description)
' ワードの強制終了
TerminateWord(xp)
Exit Function
End Function
' 関数名 : GetWordObject
' 返り値 : ワードOBJの配列番号
' 引き数 : 無し
' 機能説明 : ワードOBJ取得
' 備考 :
Public Function GetWordObject() As Integer
On Error GoTo ErrHandler
GetWordObject = -1
' ワード起動
Dim i As Long
For i = 0 To UBound(objWordApp)
If objWordApp(i) Is Nothing Then
' ワード起動
objWordApp(i) = CreateObject("Word.Application")
If objWordApp(i) Is Nothing = False Then
' ワードOBJの配列番号
GetWordObject = i
Exit For
End If
End If
Next i
If GetWordObject < 0 Then
' ワード起動失敗
Err.Raise(9999, "", "原因不明...")
End If
Exit Function
ErrHandler:
Err.Raise(Err.Number, Err.Source, _
"Microsoft Word の起動に失敗しました。" & vbCrLf & Err.Description)
Exit Function
End Function
' 関数名 : TerminateWord
' 返り値 : 無し
' 引き数 : 無し
' 機能説明 : ワードの強制終了
' 備考 :
Public Sub TerminateWord(ByVal xp As Integer)
On Error Resume Next
Dim i As Integer
For i = 0 To UBound(objWordApp)
If i = xp Then
If objDocument(i) Is Nothing = False Then
objDocument(i).Colse(0)
End If
If objWordApp(i) Is Nothing = False Then
objWordApp(i).Quit(0)
End If
objDocument(i) = Nothing
objWordApp(i) = Nothing
Exit For
End If
Next i
End Sub
' 関数名 : TerminateWordAll
' 返り値 : 無し
' 引き数 : 無し
' 機能説明 : 全てのワードの強制終了
' 備考 :
Public Sub TerminateWordAll()
On Error Resume Next
Dim i As Integer
For i = 0 To UBound(objWordApp)
If objDocument(i) Is Nothing = False Then
objDocument(i).Colse(0)
End If
If objWordApp(i) Is Nothing = False Then
objWordApp(i).Quit(0)
End If
objDocument(i) = Nothing
objWordApp(i) = Nothing
Next i
End Sub
End Module
★フォームモジュール(Form1.vb)
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim AppPath As String = System.AppDomain.CurrentDomain.BaseDirectory
Dim strDt As String = Nothing
RdWordValue(AppPath & "test.doc", strDt)
MessageBox.Show(strDt)
End Sub
Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
TerminateWordAll()
End Sub
End Class