1

PDF をプレーン テキストに変換し、プレーン テキストを Word にコピーするスクリプトを作成しようとしています。(私が働いている場所では、破損したドキュメントをゼロから再フォーマットすることがよくあります。) 私のスクリプトは、Word に貼り付けるときに、ファイル全体が貼り付けられないという 1 つの点を除いて、完全に機能します。長いファイルでは、テキストの一部しか取得できません。

'string to hold file path
Dim strDMM
strDMM = "[path]"

'make this directory if it doesn't exits
On Error Resume Next
MkDir strDMM
On Error GoTo 0

'get the file name to process
Dim TheFile
TheFile = InputBox("What is the file name?" & chr(13) & chr(13) & "(Example: [name].pdf)", "Name of File")

'declare some acrobat variables
Dim AcroXApp
Dim AcroXAVDoc
Dim AcroXPDDoc

'open acrobat
Set AcroXApp = CreateObject("AcroExch.App")
AcroXApp.Hide

'open the document we want
Set AcroXAVDoc = CreateObject("AcroExch.AVDoc")
AcroXAVDoc.Open "[path to desktop]" & TheFile, "Acrobat" 'users are instructed to save to the Desktop for ease of access here

'make sure the acrobat window is active
AcroXAVDoc.BringToFront

'I don't know what this does. I copied it from code online.
Set AcroXPDDoc = AcroXAVDoc.GetPDDoc

'activate JavaScript commands w/Acrobat
Dim jsObj
Set jsObj = AcroXPDDoc.GetJSObject

'save the file as plain text
jsObj.SaveAs strDMM & "pdf-plain-text.txt", "com.adobe.acrobat.plain-text"

'close the file and exit acrobat
AcroXAVDoc.Close False
AcroXApp.Hide
AcroXApp.Exit

'declare constants for manipulating the text files
Const ForReading = 1
Const ForWriting = 2

'Create a File System Object
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")

'read file and get text
dim objFile
set objFile=objFSO.OpenTextFile( strDMM & TheFile, ForReading)

Dim strText
strText=objFile.ReadAll

'Create a Word Object
Dim objWord
set objWord = CreateObject("Word.Application")

'make Word visible
With objWord
    .Visible = True
End With

'Add method used to create a blank document
Dim objDoc
Set objDoc=objWord.Documents.Add()

'create a shorter variable to pass commands to Word
Dim objSelection
set objSelection=objWord.Selection

'type the read text into Word; this is the part that's failing
objSelection.TypeText strText

objFile.Close

同じ結果で複数のファイルを試しました。面白いことに、ファイル A からは毎回同じ素材を貼り付けますが、ファイル B からコピーすると、異なる量の素材が貼り付けられます。言い換えれば、最初の実行で A が 60 ページ中 8 ページを提供した場合、毎回同じ 8 ページを取得します。ファイル B は 60 ページの 14 ページを提供するかもしれませんが、毎回同じ 14 ページを提供します。これは、.txt ファイルからマテリアルを削除した場合にのみ変更されます。A からいくつかの段落を削除してスクリプトを実行すると、12 ページになる可能性があります。それから私は毎回同じ12を取得します。しかし、それがどこで途切れるかを予測する (私が識別できる) パターンはありません。

EOF 文字が見つかりません。メモ帳から読み取ってメモ帳に書き込むと、すべてが完全にコピーされます。問題は、Word への転送のどこかにあります。

足りないものはありますか?Word が TypeText で書き込める文字列のサイズに制限はありますか? (そうなると、長さがバラバラのドキュメントは取得できないと思いますよね?それが限界なら、すべてn文字で止まるべきではありませんか?)

VBS がクリップボードで動作するようにする追加のライブラリについて読んだことがありますが、私は完全な初心者であり、それがよりエレガントなソリューションなのか、それを機能させる方法なのかわかりません。また、仕事用のコンピューターにこれらのライブラリをインストールするために必要なアクセス権があるかどうかもわかりません。

どんな助けでも大歓迎です!

4

2 に答える 2

4

ファイルを Word に読み込む必要はありません。ディスクからテキスト ファイルを挿入できます。

Dim objWord
'Dim objDoc
Set objWord = CreateObject("Word.Application")

'make Word visible
With objWord
   .Visible = True

   'Add method used to create a blank document
   .Documents.Add
   .Selection.InsertFile FileNameAndPath
End With
于 2012-09-05T20:51:42.273 に答える
1

あなたがほのめかした基本的な問題は、Stringデータ型が65,400 文字に制限されていることです。ファイルの長さが不明な場合は、一度に 1 行ずつ読み取って Word に書き込むことをお勧めします。hereに似たものについての良い議論があります。次のコードは、目的の場所に到達するのに役立ちます。

'read file and get text
dim objFile
set objFile=objFSO.OpenTextFile( strDMM & TheFile, ForReading)

'Don't do this!
'Dim strText
'strText=objFile.ReadAll

'Create a Word Object
Dim objWord
set objWord = CreateObject("Word.Application")

'make Word visible
With objWord
   .Visible = True
End With

'Add method used to create a blank document
Dim objDoc
Set objDoc=objWord.Documents.Add()

'create a shorter variable to pass commands to Word
Dim objSelection
set objSelection=objWord.Selection

'Read one line at a time from the text file and
'type that line into Word until the end of the file is reached
Dim strLine
Do Until objFile.AtEndOfStream
   strLine = objFile.ReadLine
   objSelection.TypeText strLine
Loop

objFile.Close

それが役立つことを願っています!

于 2012-09-05T15:52:41.000 に答える