Wordの古い「97-2003文書(.doc)」を新しい「Word文書(.docx)」の形式にまとめて変換するPowerShellのサンプルコード

記事内に広告が含まれています。

Wordの古い「97-2003文書(.doc)」を新しい「Word文書(.docx)」の形式にまとめて変換するPowerShellのサンプルコードを紹介してみようと思います。

doc形式?と思われるかもしれませんが、まだまだ古い文書を保有している企業は多いと思いますので、使いどころはあると思います。

仕様

以下のようにwordの古いファイル形式「*.doc」ファイルが同じディレクトリに格納されているとします。

これらを「transWordFiles.bat」バッチをダブルクリックするだけで、新しいWordの形式に変換するという仕様です。

※もちろん拡張子だけ変えるとかいうこざかしいことはしません。

今回の場合はとりあえず例としてWordファイルを5ファイル用意しました。

が、たぶん数百ファイルぐらいは大丈夫なんじゃないかと思います。

ソースコード

バッチ処理はPowerShellを呼び出すだけです。

ポリシーの関係で一回バッチから実行していますが、PCの設定を変更して直接PowerShellの処理を実行しても良いかと思います。

transWordFiles.bat

powershell -ExecutionPolicy RemoteSigned -File .\transWordFiles.ps1

メイン処理はPowerShellで記述しています。

処理内容は、大きくわけて以下の2つ処理を繰り返すだけです

  • ディレクトリ内のdoc形式のファイルを開く
  • 新しい形式に保存して閉じる

transWordFiles.ps1

$word = New-Object -ComObject Word.Application
$word.Visible = $false
#$word.DisplayAlerts = $false

Get-ChildItem -Filter  "*.doc" | % {
    $docxFile = $_.FullName.Replace(".doc",".docx")
    $doc = $word.Documents.Open($_.FullName)
    $doc.SaveAs2([ref]$docxFile, 16) # 16:Word default document file format. For Word, this is the DOCX format.
    $doc.Close()
    
    #プロセス開放
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($doc) | Out-Null

}

#プロセス開放
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null


実行

実行手順

では上記のPowerShellを実行してみましょう。

動かなければ絵に描いた餅です。

実行はバッチをダブルクリックするだけです。

実行結果

以下のように*docxファイルができました。

出力前のファイルを消さない仕様なので、出力結果を別フォルダに出力したほうが良かったかもしれません。

参考情報

環境

下記の環境で作成・実行しております。

No.環境バージョン
1OSWindows11
2WordWord2016
環境一覧

以上です。

コメント