1.Microsoft Officeが思いのほか進化してる。
スキャナで作ったPDFじゃなく、PCで生成されたと思われるPDFファイルをWordで開いてみるとキレイにWordで復元することができた。
マジかよと思って別の端末からもやってみたら、お古の端末のOffice2010だと同じファイルでも文字化けしてうまく表示できない。
上手くいった端末には、o365のサブスクリプション版がインストールされていた。
調べてみると、Office2013、2016以降ではWordでPDFを読み込めるようになっているらしい。(もちろんなんでも読めるって訳なじゃないけど。)
MS Officeもいろいろ進化してるんだなーって驚きました。
2.試しにWinActorのWordライブラリでPDFを開く。
これはOffice側が対応してれば当然普通にできた。
ライブラリの「Word操作(開く)」のファイルパスにPDFを指定するとそのまま開けるではないか。
3.Wordから表のデータを読み取るスクリプト書いてみた。
で、PDFをWordで読めるんだぁ。って思うとWordのデータが読み取りたくなりますよね。
でも、WinActorのライブラリ見ると編集したり表の修正はあるんだけども読み取りがなかった。
なので、とりあえずWordの中のn番目の表をそのままセル情報をカンマ区切りでCSVっぽく読み取るスクリプトを書いてみました。
読み取った内容をテキスト書き出しでファイル化して、データファイルとして繰り返しで使うとかするとPDFで届くデータの自動処理に使えるかもしれませんね。
' 引数を解釈する
wordFilePath = !ファイルパス!
tabelNum = !表番号(1~)!
Dim fileExist
Dim targetWdObj
' ====指定されたファイルを開く====================================================
Set fso = CreateObject("Scripting.FileSystemObject")
fileName = fso.getFileName(wordFilePath)
Set objWord = Nothing
On Error Resume Next
Set objWord = GetObject(, "Word.Application")
If objWord is Nothing then
Set objWord = CreateObject("Word.Application")
On Error Goto 0
End if
If objWord is Nothing then
Err.Raise 1, "", "指定されたWordアプリケーションが開けません。"
End if
objWord.Visible = True
Dim openFilePath
For i = 1 To objWord.Documents.Count
openFilePath = objWord.Documents(i).Path & "\" & objWord.Documents(i).Name
If StrComp(openFilePath, wordFilePath, 1) = 0 Then
Set targetWdObj = objWord.Documents(i)
fileExist = True
Exit for
End If
Next
On Error Resume Next
If fileExist = False Then
' ワードファイルを開く
Set targetWdObj = objWord.Documents.Open(wordFilePath)
If Err.Number <> 0 Then
On Error Goto 0
' オブジェクト解放
Set targetWdObj = Nothing
Set objWord = Nothing
Set fso = Nothing
Err.Raise 1, "", "指定されたWordファイルが開けません。"
End If
End If
' =====最前面化==================================================
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate targetWdObj
' ====テーブルのデータをCSVとして読み取る========================
Set tbl = targetWdObj.Tables(tabelNum)
tableData = ""
For r=1 To tbl.Rows.Count
rowData = ""
For c=1 To tbl.Rows(r).Cells.Count
If Len(rowData) > 0 Then rowData = rowData & ","
' セル区切り文字の削除
cellVal = tbl.Cell(r, c).Range.Text
cellVal = Left(cellVal, Len(cellVal) - 2)
rowData = rowData & """" & cellVal & """"
Next
tableData = tableData & rowData & vbNewLine
Next
SetUMSVariable $読み込みデータ$, tableData
Set targetWdObj = Nothing
Set objWord = Nothing
Set fso = Nothing
スクリプト実行のノードに張り付けてお使いください。