[[20130208082252]] 『マクロでワードパッドファイルの内容を取得するに』(カシスソーダ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでワードパッドファイルの内容を取得するには?』(カシスソーダ)

 おはようございます。よろしくお願いいたします。

 Windows XP SP3
 Excel 2002
 です。

 指定のワードパッド内容を取得したいのですが方法がわかりません。
 メモ帳(txt)の内容の取得方法はわかるのですが、そのままワードパッドに転用できませんでした。

 メモ帳の内容取得は下記のコードでいけました。

 Sub test()
  Dim mypath As String
  Dim mystr As String
   mypath = "C:\test\aaa.txt"
   mystr = naiyouget(mypath)
   MsgBox mypath
 End Sub

 Function naiyouget(ByVal mypath As String)
  Dim FSO As Object
  Dim f As Object
   Set FSO = CreateObject("Scripting.FileSystemObject")
   If FSO.getfile(mypath).Size = 0 Then
      naiyouget = ""
   Else
      Set f = FSO.OpenTextFile(mypath)
      naiyouget = f.ReadAll
   End If
   Set FSO = Nothing
 End Function

 これをワードパッド(拡張子 rtf)で試してみたら、

 (1)
 ------------
 1行目の文字列
 2行目の文字列
 3行目の文字列
 ------------
 という内容のファイルの内容を取得したら

 (2)
 ------------
 {\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\froman\fprq1\fcharset128 \'82\'6c\'82\'72 \'82\'6f\'83\'53\'83\'56\'83\'62\'83\'4e;}}
 {\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\lang1041\f0\fs20 1行目の文字列\par
 2行目の文字列\par
 3行目の文字列\par
 }
 ------------

 というような感じになってしまいました。
 たしかにワードパッドファイルをメモ帳上にドラッグ&ドロップしたら
 (2)の内容でした。
 ワードパッドをWクリックで開いたらもちろん(1)が表示されます。

 エクセルでワードパッドの内容を取得するにはどのようにコーディングすればいいでしょうか?
 ご教示お願いいたします。


 ワードパッドで開いて、書式なしのテキストで保存しなおした方が
 1番簡単なような気がしますけど。
 BJ

 Wordと互換性がありそう(PCにワードパットがないので)なので、
 Wordで開いてみては? いかがですか!!

 開ければ、Createobject("Word.Application") で

 Documentオブジェクトとして、内容を取得できそうですけどね!!

 ichinose


 BJさん、ichinoseさん、ご回答ありがとうございます。

 ワードドキュメントとして開くことでうまく行きました。

 'ワードパッドファイル内容を一行づつ取得
 Sub rtfgetA()
  Dim wd As Object
  Dim dc As Object
  Dim dcpath As String
  Dim dcstr As String
  Dim dclinestr As String
  Dim i As Integer
   dcpath = "C:\test\aaa.rtf"
   Set wd = CreateObject("Word.Application")
   Set dc = wd.documents.Open(dcpath)
   dcstr = ""
   For i = 1 To dc.Range.Paragraphs.Count
    dclinestr = dc.Range.Paragraphs(i).Range
    dclinestr = Replace(dclinestr, "", vbCrLf)
    dclinestr = Left(dclinestr, Len(dclinestr) - 1)
    If dcstr <> "" Then dcstr = dcstr & vbCrLf
    dcstr = dcstr & dclinestr
   Next i
   MsgBox dcstr
   dc.Close
   wd.Quit
   Set dc = Nothing
   Set wd = Nothing
 End Sub

 'ワードパッドファイル内容を一括取得/クリップボードに一旦格納しエクセルのコントロールツールボックスのテキストボックス使用しクリップボード内容取得
 Sub rtfgetB()
  Dim wd As Object
  Dim dc As Object
  Dim dcpath As String
  Dim dcstr As String
  Dim mytb As OLEObject
  Dim ws As Worksheet
   dcpath = "C:\test\aaa.rtf"
   Set wd = CreateObject("Word.Application")
   Set dc = wd.documents.Open(dcpath)
   dcstr = ""
   wd.Selection.WholeStory
   wd.Selection.Copy
   Set ws = ActiveSheet
   Set mytb = ws.OLEObjects.Add(ClassType:="Forms.TextBox.1", Link:=False, _
    DisplayAsIcon:=False, Left:=0, Top:=0, Width:=1, Height:=1)
   With ws.OLEObjects(mytb.Name).Object
    .MultiLine = True
    .Paste
    dcstr = .Value
   End With
   MsgBox dcstr
   mytb.Delete
   Set mytb = Nothing
   Set ws = Nothing
   dc.Close
   wd.Quit
   Set dc = Nothing
   Set wd = Nothing
 End Sub

 'ワードパッドファイル内容を一括取得/クリップボードに一旦格納しクリップボード内容直接取得
 '参照設定:Microsoft Forms 2.0 Object Library
 Sub rtfgetC()
  Dim wd As Object
  Dim dc As Object
  Dim dcpath As String
  Dim dcstr As String
  Dim ND As New DataObject
   dcpath = "C:\test\aaa.rtf"
   Set wd = CreateObject("Word.Application")
   Set dc = wd.documents.Open(dcpath)
   dcstr = ""
   wd.Selection.WholeStory
   wd.Selection.Copy
   With ND
    .GetFromClipboard
    dcstr = .GetText
   End With
   MsgBox dcstr
   dc.Close
   wd.Quit
   Set dc = Nothing
   Set wd = Nothing
 End Sub

 おかげさまで解決しました。
 ご回答ありがとうございました。

 (カシスソーダ)

 カシスソーダさんの申し分ない質問投稿、返信投稿に感心しました。

 参考程度に以下のコードです。

 Sub test()
    Dim g0 As Long
    Dim myarray As Variant
    myarray = get_wtxt(ThisWorkbook.path & "\xxxx.rtf")
                       '実際のパス
    If TypeName(myarray) <> "Boolean" Then
       myarray = Split(myarray, Chr(13))
       For g0 = LBound(myarray) To UBound(myarray)
          Cells(g0 + 1, 1).Value = "'" & myarray(g0)
       Next
       Erase myarray
    Else
       MsgBox "エラー発生"
    End If
 End Sub
 Function get_wtxt(ByVal path As Variant) As Variant
 '機能  Wordで開いたファイルのテキストを取得する
 'input   path  取得したいテキストがあるファイルのフルパス
 'out     get_wtxt  取得したテキスト  False--何らかのエラー発生
    On Error Resume Next
    With CreateObject("word.application")
       .Visible = False
       With .Documents.Open(path)
          If Err.Number = 0 Then
             get_wtxt = .Range.Text
          Else
             get_wtxt = False
          End If
          .Close False
       End With
       .Quit
    End With
    On Error GoTo 0
 End Function

 ichinose


 ichinoseさん、再度のご教示ありがとうございます。

 ご教示いただきましたコードでうまく行きました。
 最初エラーになったので何故?と思ったら新規ブックで実行してました。
 ブックを一度保存してから実行したらうまく行きました。

 また、あまり意味ないかもしれませんが変わりませんが、コードを下のよう
 に書き換えてもうまく行きました。

 >    myarray = get_wtxt(ThisWorkbook.path & "\www.rtf")
 >                       '実際のパス

 ↓
    myarray = get_wtxt(ThisWorkbook.path & "\www.rtf")
                        '実際のパス
    myarray = "'" & Replace(myarray, Chr(13), Chr(13) & "'")

 >   Cells(g0 + 1, 1).Value = "'" & myarray(g0)
  ↓
    Cells(g0 + 1, 1).Value = myarray(g0)

 ありがとうございました。
 (カシスソーダ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.