|
|||||
ワード(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 |