我使用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)
答案 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会在合并文档到达队列之前退出,导致没有任何内容被打印。