PowerShellでWordの情報をCom(Component Object Model)オブジェクトで引き抜けることを覚えた筆者。WordといえばExcelとならんで過去の業務情報が蓄積された資産でもある。
○フォルダ内のWord(.docx)すべての文面をPowerShellに表示
フォルダ内にまとまった倉庫としてWordが保存してある場合もある。そういう場合には前回のスニペットをカレントフォルダ内の.docxにすべて適応させる。以下のようにPowerShellコマンドで直接呼び出すことも可能だ。
Get-ChildItem *.docx | % {
wo $_.Name
}
Get-ChildItemでフォルダ内にあるWord(.docx)ファイルのすべてを取得し、パイプとループ(%)で前回、作成した関数woにファイル名を渡している。これを実行すると、フォルダ内のWordファイルのテキストをPowerShell上に表示してくれる。
○PowerShellでWordからリンクを抽出するには?
ほかに、なにか引き抜けないか?と調べてみた。こちらにVBAのWordのドキュメントオブジェクトのレファレンスがあるが、そのままPowerShellで使えるスニペットはない。PowerShellコマンドレットのgm(Get-Member)はオブジェクトの情報を表示させる機能を持つ。ひとつの足掛かりとして、woコマンドに挿入してみる。
function wo
function wo {
param([string]$FileName)
$path = Join-Path $PWD $FileName
$word = New-Object -ComObject Word.Application
$doc = $word.Documents.Open($path)
$text = $doc.Content.Text
$text
$doc | gm
$doc.Close()
$word.Quit()
}
すると、以下のように表示メソッドやプロパティのメンバ情報が表示される。
たとえばリンク。
さきのオブジェクトブラウザにはHyperlinksもある。複数リンクを処理するコレクションであるので、単体のHyperlinkにあるメンバのAdressを% { $_.Address }とパイプで渡して以下のように繋いでみる。
function wl
function wl {
param([string]$FileName)
$path = Join-Path $PWD $FileName
$word = New-Object -ComObject Word.Application
$doc = $word.Documents.Open($path)
$doc.Hyperlinks | % { $_.Address }
$doc.Close()
$word.Quit()
}
こうするとWordのなかのリンクをすべて抽出できる。
.











![[USBで録画や再生可能]Tinguポータブルテレビ テレビ小型 14.1インチ 高齢者向け 病院使用可能 大画面 大音量 簡単操作 車中泊 車載用バッグ付き 良い画質 HDMI端子搭載 録画機能 YouTube視聴可能 モバイルバッテリーに対応 AC電源・車載電源に対応 スタンド/吊り下げ/車載の3種類設置 リモコン付き 遠距離操作可能 タイムシフト機能付き 底部ボタン 軽量 (14.1インチ)](https://m.media-amazon.com/images/I/51-Yonm5vZL._SL500_.jpg)