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上に表示してくれる。

  • 20260903フォルダ内のhina.docx、test2.docx、test3.docxのテキストが表示された

    20260903フォルダ内のhina.docx、test2.docx、test3.docxのテキストが表示された

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()
}

すると、以下のように表示メソッドやプロパティのメンバ情報が表示される。

  • gm(Get-Member)でオブジェクトが持つ情報を表示

    gm(Get-Member)でオブジェクトが持つ情報を表示

たとえばリンク。Wordをアプリケーションで開いてAlt+F12で開くVBAエディタでオブジェクトブラウザ(F2)を開きHyperlinksを検索すると使えるクラスやメンバーが表示される。

  • Wordのオブジェクトブラウザにさらなる情報がある

    Wordのオブジェクトブラウザにさらなる情報がある

さきのオブジェクトブラウザには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のなかのリンクをすべて抽出できる。

  • コマンドwlでtest2.docxにあるリンクを抽出

    コマンドwlでtest2.docxにあるリンクを抽出

最初のフォルダ内のWord(.docx)にコマンドを適用するスニペットをリンク抽出のfinction wlに変えて実行してみる

Get-ChildItem  *.docx | % {
    wl $_.Name
}
  • フォルダの中のWord(.docx)ファイルのリンク設定をすべて抽出した

    フォルダの中のWord(.docx)ファイルのリンク設定をすべて抽出した

PowerShellからはCtrl+クリックで実際にブラウザが起動するので、あるフォルダに保存・保管したWordファイルにあるリンクをチェックするような際には役立つ。多少の骨は折れるが、調べてみて試しながらカスタマイズしていくと個人ベースでは有用なスクリプトが実装できるのであった。