Powershell邮件合并仅打印第一页

时间:2016-02-05 21:26:04

标签: powershell

我使用Powershell使用MS Word和下面的代码编写邮件合并脚本...合并正确执行,但是当我使用.PrintOut()命令时,只打印第一页。

无论如何我可以强制它打印完成合并中的所有页面吗?

谢谢。

$word = New-Object -ComObject "Word.application"
$word.visible = 1
$doc = $word.Documents.Open("$PSScriptRoot\resources\templateFile.docx")
$doc.MailMerge.Execute()
$doc.PrintOut()
$quitFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveOptions],"wdDoNotSaveChanges")
$word.Quit([ref]$quitFormat)

2 个答案:

答案 0 :(得分:0)

尝试将WdPrintOutRange指定为wdPrintAllDocument

$doc.PrintOut(
    [ref]$false,
    [ref]$false,
    [ref][Microsoft.Office.Interop.Word.WdPrintOutRange]::wdPrintAllDocument
)

答案 1 :(得分:0)

最后想通了......我的原始代码打开了“templateFile.docx”文件,然后执行了邮件合并,实际创建了一个名为“Form Letters1.docx”的新文档

简单地发出$ doc.PrintOut()命令将打印原始(非合并)“templateFile.docx”,它只是一个页面。

解决方案是在打印前将“焦点”切换到新创建/合并的文档。

以下是工作代码:

$word = New-Object -ComObject "Word.application"
$word.visible = 1
$doc = $word.Documents.Open("$PSScriptRoot\templateFile.docx")
$doc.MailMerge.Execute()
($word.documents | ?{$_.Name -match "Letters1"}).PrintOut()
Start-Sleep -Seconds 5
$quitFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveOptions],"wdDoNotSaveChanges")
$word.Quit([ref]$quitFormat)

另一个有趣的点是“开始 - 睡眠”命令......没有它,Word会在合并文档到达队列之前退出,导致没有任何内容被打印。