サイトアイコン わんすけに聞いてみる

Wordの表からCSV形式でデータを取得

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

スクリプト実行のノードに張り付けてお使いください。

モバイルバージョンを終了