dポイントプレゼントキャンペーン実施中!

ExcelVBA+xdoc2txtを使い、以下の手順でPDFをtxtに変換します。

・xdoc2txt.exeがいるフォルダを指定させる。
・PDFがいるフォルダを指定させる。
・以上を組み合わせxdoc2txt.exeを起動する。

この手順ですが、xdoc2txt.exe及びpdfがDドライブ直下などに
存在する場合は実現出来ています。
問題は両者がデスクトップに存在する場合です。
おそらくデスクトップのフルパスがスペースを含んでいるので
上手く行かないではないかと想像しています。

xdoc2txtのヘルプには「※空白を含むファイル名の場合、""で囲ってください」とあるので、例えば、

"C:\Documents and Settings\hogehoge\デスクトップ\xdoc2txt\xdoc2txt.exe -f C:\Documents and Settings\hogehoge\デスクトップ\PDF\xxx.pdf"

あるいは

C:\Documents and Settings\hogehoge\デスクトップ\xdoc2txt\xdoc2txt.exe -f "C:\Documents and Settings\hogehoge\デスクトップ\PDF\xxx.pdf"

という風にダブルコーテーションで囲ってみたのですが、上手く動作しません。
その実現方法についてご教示いただけると幸いです。

A 回答 (2件)

こんにちは。



"C:\Documents and Settings\hogehoge\デスクトップ\xdoc2txt\xdoc2txt.exe" -f "C:\Documents and Settings\hogehoge\デスクトップ\PDF\xxx.pdf"

EXE のパスと変換対象のファイルのパスともにダブルクォーテーション(WQ)
で括ります。

  "EXEのパス" -f "変換対象ファイルのパス"

コマンドラインは 半角 SP がパラメータ区切りとして認識されてしまいます
ので、半角 SP が含まれるパスは全て WQ で括る必要があります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
御礼が遅くなり申し訳ございません。

なるほど。そこをダブルコーテーションで区切るのですか。
さっそく試したところ無事動きました。

お礼日時:2009/03/03 15:19

投稿後、ふと思ったのですが。



> ExcelVBA+xdoc2txtを使い、以下の手順でPDFをtxtに変換します。

VBA を使うならわざわざ EXE ではなく、xdoc2txt.ocx を使った方が
何かと都合が良い気がしますね。

最近、類似の質問に回答してます。
http://oshiete1.goo.ne.jp/qa4701263.html

上記 URL の手順で xdoc2txt.ocx, zlib.dll の 2 つのファイルを
システムに登録したら、下記のようなソースで指定フォルダ内にある
全対象ファイルのテキスト抽出が可能です。

そして、検索フォルダの指定には、BrowseForFolder で WEB 検索して
もらえれば、フォルダ選択ダイアログのサンプルソースが見つかる
でしょうから、それを利用します。

もし参考にされるようであれば、エラートラップは必要に応じ追加して
下さい。また、出力は仮に VBE のイミディエイトウインドウにして
いますが、外部ファイルにするなり、ワークシートにするなり、適当に
修正してみて下さい。

Sub Sample()
  
  ' // 対象ファイル拡張子(カンマ区切りで小文字指定)
  Const LIST_EXTENTION As String = "pdf,xls,txt,doc"
  
  Dim sDirectory As String
  Dim sExtention As String
  Dim sText   As String
  
  Dim fso    As Object ' // FileSystemObject
  Dim f     As Object ' // File
  Dim xdc    As Object ' // xdoc2txt

  ' // 検索フォルダ
  sDirectory = "C:\Documents and Settings\hogehoge\デスクトップ"
  
  ' // xdoc2txt の準備
  Set xdc = CreateObject("XDOC2TXT.xdoc2txtCtrl.1")
  ' // FileSystemObject の準備
  Set fso = CreateObject("Scripting.FileSystemObject")

  For Each f In fso.GetFolder(sDirectory).Files
    ' // 拡張子で対象ファイルを簡易フィルタ
    sExtention = LCase$(fso.GetExtensionName(f.Name))
    If InStr(LIST_EXTENTION, sExtention) Then
      ' // xdoc2txt を使ってテキスト抽出します
      sText = xdc.Convert(f.Path)
      ' // イミディエイトウインドウへ出力
      Debug.Print String$(80, "-")
      Debug.Print "File:= " & f.Name
      Debug.Print String$(80, "-")
      Debug.Print sText
    End If
  Next

  Set xdc = Nothing
  Set fso = Nothing

End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
わざわざソースまで書いていただき、重ね重ね
ありがとうございます。

残念ながら、今回は特定のPCで作業を行うわけではなく、
xdoc2txt及びPDF一式を持って回って、不特定のPCで
作業するため、ocxでの作業は難しいかと思われます。

今後、そういった機会があれば参考にさせていただきたいと思います。

お礼日時:2009/03/03 15:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!