人に聞けない痔の悩み、これでスッキリ >>

VBで文書を検索できるシステムを作っています。
通常検索では、テキストボックスに入力した文字列と一致するものをデータベースに登録した文書名から探してきてMSHFlexGridコントロール上に表示するようにしています。
今回は、追加検索として、指定したフォルダの中にあるPDFファイルやワードファイルなどの文書中の文字から一致するものを探して表示する機能を作りたいと考えています。
この様な機能はどの様に作れば良いのでしょうか?
色々とサイトを探してみたのですが、該当するものを見つけることが出来ませんでした。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。



[xdoc2txt]
PDF,WORD,EXCEL,一太郎などの各種バイナリ文書からテキストを抽出
http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html

VB から xdoc2txt.exe を起動して抽出テキストをリダイレクトする。
または、ActiveX 版 xdoc2txt.ocx を使うとか。

一から VB でとなると恐ろしく面倒で、難しいですよ。

まず速度面の問題があるでしょうし、ファイルフォーマットの解析が
必要になったり。。
    • good
    • 0

明示的に使ったことはありませんが、Microsoft の各種検索エンジンに検索対象を増やす目的で iFilter という仕組みがあります。


これも調査なさってはどうでしょうか。

<Microsoft のサイトに掲載されている iFilter の一覧>
http://www.microsoft.com/japan/sharepoint/server …

<iFilter を利用して PDF のテキスト検索をするサンプル>
http://gihyo.jp/dev/serial/01/make-findspot/0016
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPDFファイルから特定の文字を検索し、頁を抽出する方法

PDFファイルの文書の中から、特定の文字列を検索し、その文字が含まれているページだけを抽出して別のPDFファイルを作る方法を教えてください。
検索結果の件数は表示されるのですが、その頁を抽出(あるいは、文字を含まない頁を削除)する方法がわかりません。
元のページ数が多いので、手作業での不要ページ削除が難しく大変困っています。
(win7でAdobe Acrobat 11 Standardを使用しています) 
どうかよろしくお願いいたします。

Aベストアンサー

検索結果から文字列のあるページをクリックして表示しておけば、その
ページ番号などが分かります。それでページのみでの抽出をすることは
可能だと思いますよ。
https://helpx.adobe.com/jp/acrobat/kb/3320.html
http://www.itmedia.co.jp/bizid/articles/1304/01/news007.html

QエクセルVBAで、PDFファイルを開きたい

セルに入力した値のブック(xls)を開く場合、
以下となりますが、↓

Sub セルに入力したブック名のブックを開く()
ブック名 = Cells(1, 2) 'B1セルの値を取り出す
Workbooks.Open Filename:=ブック名 & ".xls" '指定されたブックを開く
End Sub


これでPDFファイルを開きたいです。
記述をどうしたらよいでしょうか。
目的はPDFファイルの検索/照会をxlsにてしたいのです。
お手数ですがお願いいたします。

Aベストアンサー

案1
ハイパーリンクにしてしまう。

案2
PDFファイルへのフルパスが、B列に記述してある
拡張子PDFへの関連付けがAcrobat Reader にしてある
と仮定して
ワークシートのイベントに

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If InStr(Target.Value, "pdf") > 0 Then
  Call Shell("explorer.exe " & Target.Value)
  Cancel = True '編集モードキャンセル
End If
End Sub
とか?

PDFファイルが一箇所にまとまっているのなら
標準モジュールに
Sub test2()
Dim strFilePath As String
strFilePath = _
  Application.GetOpenFilename _
  ("PDFファイル,*.pdf", MultiSelect:=False)

If strFilePath = "false" Then
 Exit Sub
End If

Call Shell("explorer.exe " & strFilePath)

End Sub
でも?
ということかな?

案1
ハイパーリンクにしてしまう。

案2
PDFファイルへのフルパスが、B列に記述してある
拡張子PDFへの関連付けがAcrobat Reader にしてある
と仮定して
ワークシートのイベントに

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If InStr(Target.Value, "pdf") > 0 Then
  Call Shell("explorer.exe " & Target.Value)
  Cancel = True '編集モードキャンセル
End If
End Sub
とか?

PDFファイルが一箇所にまとまっているのなら
標準モジュー...続きを読む

Q複数あるPDFファイルのページ数を知りたい

当方は1,000個以上のPDFファイルを所有しています。それぞれのPDFファイルのページ数を知りたいのですが、このページ数を簡単に検索(一括表示)できる無料ツールなどを知っている方は是非、教えてください。

Aベストアンサー

初めまして。
私も同じようなことをしようと思い、色々探していました。

それで下記のサイトにある「ComPDF」を使ってみたらいかがでしょうか。
シェアウェアですが、ページ数を調べるのでしたら大丈夫でしたよ。
私が調べたアプリの中では精度がかなりいいです。

http://www.ne.jp/asahi/foresth/home/

QPDFを全文検索するプログラム

Acrobatの提供するJavascriptオブジェクトやAPIを使用して、PDFを対象とした
全文検索ツールを作りたいのですが、書籍等も少なく、なかなか有効な情報に
出会えません。どなたか実際にそのような開発に携わったことがあれば、
その手法に関する情報をご提供頂けないでしょうか?
なお、市販のPDF全文検索ソフトもいろいろあるのですが、ライセンス
フリーなものが今回必要となり、自作を検討しております。
用途はPDFをCD-Rに焼き、そのCD-R内にCD-R内全文検索プログラムを
組み込むというものです。
よろしくお願い致します。

Aベストアンサー

私は経験も知識も無いものですが、
A.PDFファイルを直接読んで検索する。
B.人間が操作して、下記RTFファイルまたはテキストファイルに抽出して、検索する。の2つが考えられると思います。
お手許にPDFファイルのファイルフォーマットは既にあるのでしょうか。
その後Adobe社にこの形式のファイルを読み検索するアプリを作成する(その後貴社でソフトを販売するのですか?それを明確に伝えて)のに認諾や契約や有償が必要なのか確認されましたか。
(1)AcrobatファイルはRTF形式にテキスト部分のみ落とせるとのことです。
http://www.keiyu.com/doc/pdftxt.htm
http://search.luky.org/linux-users.8/msg00983.html
http://www.pdf-seek.com/jyouhou/index.html
http://pc-training.hp.infoseek.co.jp/pdf.html
http://www.y-adagio.com/public/standards/tr_pdf/pdfmain.htm
(この中に「著作権認諾」のことも載っている。)
相当調べられたふうですが、「PDF」「テキスト」「ファイル形式」「ファイルフォーマット」などでWEB検索してみてください。
(2)この落としたファイルを対象に、自作の検索プログラムを作り、走らせる。
(3)(1)はAcrobatの「操作」ですから、その通り操作でやると
オフラインバッチ処理的になり、1ステップ入ってしまいます。
それで良いのでしょうか。もし操作を自動的にするマクロのようなものが
あればAと近くなり、良いのでしょうが。
(3)バッチ的になって良いなら、(1)を操作でさせて、RTFファイルを読みこみ、扱う方法を習得すれば、検索プログラムが出来ると思います。
検索は「JavascriptオブジェクトやAPI」にそのものズバリはあるはずは
無いと思います。WINやJAVAやその他で検索エンジンまでAPIになっている例があるのでしょうか。
すなわち言いたいことは、RTFの形式のフォーマット詳細を調べるとかして勉強し、処理言語を決めて扱える事ができるようになることがターゲットでしょう。
(4)あと文章検索について色々なアルゴリズムがあるようですので、それを調べて勉強し、その処理言語で使用できるようになることでしょう。クラスモジュールのようなものが販売されておれば、使えると早いでしょうが。
経験のないものがあれこれいっておりますが、目指し進む方向がちょっと
気になりましたので。得るものがあれば幸甚です。

私は経験も知識も無いものですが、
A.PDFファイルを直接読んで検索する。
B.人間が操作して、下記RTFファイルまたはテキストファイルに抽出して、検索する。の2つが考えられると思います。
お手許にPDFファイルのファイルフォーマットは既にあるのでしょうか。
その後Adobe社にこの形式のファイルを読み検索するアプリを作成する(その後貴社でソフトを販売するのですか?それを明確に伝えて)のに認諾や契約や有償が必要なのか確認されましたか。
(1)AcrobatファイルはRTF形式にテ...続きを読む

QPDFファイルを開き、印刷し、閉じるマクロ

Excel 2003 VBAにて、
PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。

Dim AA, AAA

AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf"
AAA = Shell(AA, vbNormalFocus)

にて、PDFファイルを開くことは出来ました。
このPDFファイルを、「印刷し、閉じる」ためには、
このPDFファイルを指定する必要があると思いますが、
その構文が判りません。
知っている方、教えて下さい。

Aベストアンサー

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant)
Dim cmdLine As String
Dim WShell As Object
Dim oExec As Object
'ここは調整の必要がありそう
Const waitTime As Long = 1000
'Windows7 Home 64bitの場合です
Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Set WShell = CreateObject("WScript.Shell")
If IsMissing(printerName) Or IsMissing(printerDriver) Then
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
Else
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
cmdLine = Replace(cmdLine, "printerName", printerName)
cmdLine = Replace(cmdLine, "printeDriver", printerDriver)
End If
Debug.Print cmdLine
Set oExec = WShell.exec(cmdLine)
Sleep waitTime
'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが
'Adobe Readerは閉じられる様です
On Error Resume Next
oExec.Terminate
Set WShell = Nothing
End Sub

Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。
Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。
http://msdn.microsoft.com/ja-jp/library/cc364387.aspx

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional prin...続きを読む

QVBAでAcrobatを操作してテキスト抽出で詰まっています。

ExcelVBAからAcrobatを立ち上げPDFからテキストと、その座標情報を取得したいと考えております。

http://pdf-file.jugem.jp/
を参考にしてAcrobatを立ち上げJavaでテキストを抽出することはできましたが、その座標情報を得られず困っております。

Dim test As Variant
test = jso.getPageNthWordQuads(0, 1)

でtestには8つの値が配列で入るはずなのですがtest(0)にしか値は入っていません。
この値は妥当な値を得られているのですが、test(1)からは参照できません。

いろいろ調べて、VBAのvariantはVBのそれとは違う・・・のが原因ではというところで行き詰りここに書き込んでみることにしました。

VBAで同様なことをされている方がいましたらぜひよろしくお願いします。

Aベストアンサー

こんにちは。

>VBAで同様なことをされている方がいましたらぜひよろしくお願いします。
ふつうは、pdf に、テキストが入っているとは限らないし、プロテクトが掛かっていたら出来ませんので、印刷プロテクトが入っていないものなら、私は、OCR で取ってしまいます。それに、小さい規模なら、テキストが入っていれば、テキスト・コピーが利きます。

Acrobat 自体は分かりませんが、

test = jso.getPageNthWordQuads(0, 1)

もし、もともとが、配列があるとするなら、インデックス(添え字)を入れなければ、そのまま入るはずです。ただし、変数 test は、Variant 型で、配列の宣言をしないことが条件です。

そういうことではなくて、それぞれを取りたいなら、

jso.getPageNthWordQuads が、8つがどのような構造をしているかは分かりませんが、

座標は、二次限配列なのですから、

getPageNthWordQuads ([nPage],[nWord])

そのそれぞれのインデックスに、たぶん、0か、1 から、上限まで数字を入れれば出てくるはずです。

こんにちは。

>VBAで同様なことをされている方がいましたらぜひよろしくお願いします。
ふつうは、pdf に、テキストが入っているとは限らないし、プロテクトが掛かっていたら出来ませんので、印刷プロテクトが入っていないものなら、私は、OCR で取ってしまいます。それに、小さい規模なら、テキストが入っていれば、テキスト・コピーが利きます。

Acrobat 自体は分かりませんが、

test = jso.getPageNthWordQuads(0, 1)

もし、もともとが、配列があるとするなら、インデックス(添え字)を入れなけ...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVB.NET xdoc2txtをつかってPDFからテキストを取り出すコーディングがわかりません

[xdoc2txt]
PDF,WORD,EXCEL,一太郎などの各種バイナリ文書からテキストを抽出

を利用して、c:\tempにあるpdfファイルからテキスト情報を取り込みたいです。
xdoc2txt.exeやxdoc2txt.dllなどはどこに配置したら良いのかも教えてください。
お願いします。

Aベストアンサー

こんにちは。

>すみませんVB初心者のため、全体的なコーディングの流れを教えて頂けると助かります。

コーディングといっても、VB.Net では、TextBox に出てきたものを流し込むだけですよね。今、VB.Net と言われても、感覚を取り戻すまでには時間も掛かります。ですから、VBSで間に合わせさせていただきます。

》xd2tx216.zip に入っている
》xd2txcom.dll (xdoc2txt com dll版)サンプル VBScipt は参考にはなりませんか?

》 (1)xd2txcom.dllをregsvr32で登録してから実行してください。
》 regsvr32 xd2txcom.dll
》 (2)64bit OSで実行するときは、%WINDIR%SysWOW64\CScript.exe で実行してください。

細かい所は、「誰でも使えるxdoc2txt」を参考にしてください。
http://talk-pc.sakura.ne.jp/anybody_setup_xdoc2txt.html#versionup

ありきたりですが、簡単なコードを、VBSで作ってみました。
要するに、regsvr32 で登録した後は、
Set objXDOC = CreateObject("xd2txcom.Xdoc2txt.1")
とか、com オブジェクトで設定すれば済むわけです。

objXDOC.ExtractText(strArg, False)
実行コマンドはこれです。

後は、通常通りだと思います。

以下は、ドラッグ&ドロップ でアーギュメントを与える方法ですが、必要な部分だけを取り出してまってください。

主要なものはほとんど読めるようになっています。
As/R というファイラーに組み込んでしまいましたが、
http://www.all.undo.jp/asr/1st/
こんな簡単なものでも、思った以上に便利です。

Editorでみますから、textファイルは読みません。
また、画像が入っているものは、しばらく止まっていることがあります。
バグっぽいところは、気がついているのですが、それは、ご容赦のほどを。

'----Xdoc2Txt_Viewer.vbs----

Dim ext
Dim objFs
Dim txtOut
Dim strArg
Dim strExt
Dim exts
Dim ret
Dim buf
strExt = "rtf,docx,xlsx,xlsm,pptx,doc,xls,ppt," & _
"sxw,sxc,sxi,sxd,odt,ods,odp,odg,jaw,jtw,jbw," & _
"juw,jfw,jvw,jtd,jtt,oas,oa2,oa3,bun,wj2" & _
"wj3,wk3,wk4,123,wri,pdf,mht,html,eml"
exts =Split(strExt,",")
Set Args =Wscript.Arguments
txtOut =""
Set objXDOC = CreateObject("xd2txcom.Xdoc2txt.1")
Set objFs= CreateObject("Scripting.FileSystemObject")
For Each strArg in Args
ext= objfs.GetExtensionName(strArg)
ret =Filter(exts,ext,True,1)
If UBound(ret)>-1 And Ubound(ret)< 2 Then
buf =objXDOC.ExtractText(strArg, False)
txtOut = txtOut & buf & vbCrLf
Else
txtOut =txtOut & vbCrLf & strArg
End If
Next
If txtOut <>"" Then
MsgBox txtOut
End If
'----------------

こんにちは。

>すみませんVB初心者のため、全体的なコーディングの流れを教えて頂けると助かります。

コーディングといっても、VB.Net では、TextBox に出てきたものを流し込むだけですよね。今、VB.Net と言われても、感覚を取り戻すまでには時間も掛かります。ですから、VBSで間に合わせさせていただきます。

》xd2tx216.zip に入っている
》xd2txcom.dll (xdoc2txt com dll版)サンプル VBScipt は参考にはなりませんか?

》 (1)xd2txcom.dllをregsvr32で登録してから実行してください。
》 regsvr32 xd2tx...続きを読む

QExcelでPDFファイルを利用する方法

いつもお世話になっております。

Excel2007ではアドインでPDFファイルを書き出すことができますが、逆に、PDFを読み込むことができないでしょうか。
ExcelVBAで、PDFファイルにあるテキストの表の値をワークシートにコピーしたいのですが、方法がわからず困っております。
どなたか、お助けいただけないでしょうか。

Aベストアンサー

Excel は PDF を読み込めませんので、PDF を開けるアプリケーション側から Excel に歩み寄っていく方向性がよろしいかと。

ちょっと実験してみました。
準備として Excel 2007 で表を作成し、PDF に出力したものを使いました。なので PDF の中の表に含まれる文字や数値は "文字" です。紙をスキャニングしたような "絵" ではありません。

この PDF を Adobe Acrobat 7.0 Standard で開き、テキスト選択モードにして表全体を選択。[右クリック] して [テーブルとしてコピー] をしました。
その状態で新規 Excel のシート上で [Ctrl]+[C] などで貼り付けをしてみると、見事に表がシートの上に展開されました。

また、Acrobat で [ファイル]-[名前を付けて保存] で保存形式を "Microsoft Word" にして保存し、そいつを Word で開いても表が再現されました。
ただ、ちょとだけセルがずれてましたけど。(表の左上のマスなど、何も文字が入らないマスがズレの原因になるようです)
Word の上に再現された表の全体をコピーして Excel のシートの上で [編集]-[形式を選択してコピー] をポイントし、"テキスト" の形式で張り付けてみるとズレてはいるものの割ときれいに表が張り付きました。(横軸のタイトル行が 1マスだけ左にずれました)

というような結果です。
最初のころにも書きましたが、PDF ファイルの中の表に含まれる文字や数値が 「人が見て文字や数字に見える」 てだけじゃなく、コンピュータ的にも文字や数値として判断できる状況じゃないとこの方法は無理です。表が書かれた紙資料をスキャニングして PDF 化した物からはできないです。
そういう場合は OCR などを使って先に "絵" を "文字" にする作業が必要かと思います。
私は Acrobat を使いこなしているわけでもないですし、手持ちは安い方の Standard Edition なので、もしかしたら上記の解決は Acrobat だけでも可能かもしれませんが。

Excel は PDF を読み込めませんので、PDF を開けるアプリケーション側から Excel に歩み寄っていく方向性がよろしいかと。

ちょっと実験してみました。
準備として Excel 2007 で表を作成し、PDF に出力したものを使いました。なので PDF の中の表に含まれる文字や数値は "文字" です。紙をスキャニングしたような "絵" ではありません。

この PDF を Adobe Acrobat 7.0 Standard で開き、テキスト選択モードにして表全体を選択。[右クリック] して [テーブルとしてコピー] をしました。
その状態で新規 E...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング