PowerShellからWordの差込印刷を実施
経緯
PowerShellでシステムを作ったときに帳票を出力するためにWordの差し込み印刷を利用する。実際にはファイルパスについてはtempフォルダを作成し、テンプレートとなるWordファイルをコピーし、元データとなるCSVファイルやExcelファイルを合わせて出力する想定
サンプルソース
# Word アプリケーションオブジェクトを生成
$word = New-Object -ComObject Word.Application
$word = New-Object -ComObject Word.Application
# Word を表示
$word.Visible = $false
# DisplayAlertsをFalseに設定(警告を非表示)
$wdAlertsNone = 0;
$word.DisplayAlerts = $wdAlertsNone;
# Word 文書を開く
$docPath = "C:\Users\user1\DeskTop\Sample\templete1.docx" # テンプレートのパス
$document = $word.Documents.Open($docPath)
# データソース (CSV ファイル) を開く
$csvPath = "C:\Users\user1\DeskTop\Sample\sample2.csv" # データソースのパス
$dataconnection = $document.MailMerge.OpenDataSource($csvPath, $false, $true)
$csvPath = "C:\Users\user1\DeskTop\Sample\sample2.csv" # データソースのパス
$dataconnection = $document.MailMerge.OpenDataSource($csvPath, $false, $true)
# 差し込み印刷の実行
$document.MailMerge.Execute()
$document.MailMerge.Execute()
# 結果を新しいドキュメントに保存
$savePath = "C:\Users\user1\DeskTop\Sample\output.docx" # 保存先のパス
$document.SaveAs($savePath)
$savePath = "C:\Users\user1\DeskTop\Sample\output.docx" # 保存先のパス
$document.SaveAs($savePath)
# Word アプリケーションを閉じる
#$document.Close SaveChanges:=wdDoNotSaveChanges
$document.Close([ref]$false)
#[ref]$falseをしておかないと「定型書式」の保存ダイアログメッセージが表示されてしまう
$word.Quit([ref]$false)
# DisplayAlertsをFalseに設定(警告を非表示)
#$word.DisplayAlerts = $true
#$document.Close SaveChanges:=wdDoNotSaveChanges
$document.Close([ref]$false)
#[ref]$falseをしておかないと「定型書式」の保存ダイアログメッセージが表示されてしまう
$word.Quit([ref]$false)
# DisplayAlertsをFalseに設定(警告を非表示)
#$word.DisplayAlerts = $true
# COM オブジェクトを解放
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($document)
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($word)
Write-Host "差し込み印刷が完了しました。結果は $savePath に保存されました。"
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($document)
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($word)
Write-Host "差し込み印刷が完了しました。結果は $savePath に保存されました。"