NonSoft

ワードファイルを入力(読込)するサンプル(VB.NET)


 サンプル(ソース/コード)
ワード(WORD)ファイル(.doc)のテキストを入力(読み込み)するサンプルです。
Word.Applicationを使用しています。同時に複数のファイルを読込可能なように工夫しています。
また、Wordを終了させる処理を忘れるとタスクマネージャに残ってしまうので、
Form1_FormClosedで確実に終了するようにしています。

ワードファイルを読み込む方法は以下のようにしています。
1.ワード(Word.Application)起動
2.ワードファイルを開く
3.ワードのテキスト部分の選択
4.ワードのテキスト部分をクリップボードへコピー
5.クリップボードのテキストをペースト(貼り付け)して取得

VB.NETのワード入力のサンプルはこちらです。
ワードファイルを入力(読込)するサンプル(C#.NET)

★標準モジュール(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