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
スクリプト実行のノードに張り付けてお使いください。