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のなかのリンクをすべて抽出できる。
.
![美酵 ビファ クレンズドリング 栄養機能⾷品 30包約30日分 [ 発酵 と マグネシウム の力で 美容と健康をサポートし 満腹感 のある 置き換えダイエット ]](https://m.media-amazon.com/images/I/51FnYyHl-kL._SL500_.jpg)
![明治薬品 シボラナイト2 150粒(30日分) [シリアルナンバー付] [ ダイエットサプリ ブラックジンジャー ポリメトキシフラボン 腹部の脂肪を減らす ]](https://m.media-amazon.com/images/I/41U8wqxGJVL._SL500_.jpg)



![hiritu(ヒリツ) バランスリペアシャンプー&ヘアトリートメント オーロラ [シリーズ最高峰のツヤ] きらめき髪 ツヤ髪 浮き毛パヤ毛抑制 ダメージ毛を集中補修 PPT系洗浄成分 アミノ酸系洗浄成分 毛髪補修成分 カシス&パチュリの香り 香水シャンプー](https://m.media-amazon.com/images/I/41FoHN-YVXL._SL500_.jpg)





