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. | 環境 | バージョン |
---|---|---|
1 | OS | Windows11 |
2 | Word | Word2016 |
以上です。