Powershell中的PowerPoint ExportAsFixedFormat

时间:2010-11-03 11:24:07

标签: pdf powershell export powerpoint

我尝试从PowerShell 2.0脚本中使用PowerPoint 2007中的ExportAsFixedFormat。只需要前两个参数,但这不起作用。

我总是得到:

  

使用“2”调用“ExportAsFixedFormat”的异常   参数:“类型不匹配。(   来自HRESULT的异常:0x80020005(DISP_E_TYPEMISMATCH))“

我已经读过必须指定所有参数才能使它起作用,但这也不起作用。顺便说一句,相同的方法适用于Word 2007和Excel 2007。

这有什么问题:

Add-type -AssemblyName Office
Add-type -AssemblyName Microsoft.Office.Interop.PowerPoint

$p = new-object -comobject powerpoint.application 
$p.visible = 1  
$document = $p.presentations.open('somefile.ppt')


$document.ExportAsFixedFormat($Path, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::ppFixedFormatTypePDF, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatIntent]::ppFixedFormatIntentScreen, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
[Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder]::ppPrintHandoutVerticalFirst, 
[Microsoft.Office.Interop.PowerPoint.PpPrintOutputType]::ppPrintOutputSlides, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
$null, 
[Microsoft.Office.Interop.PowerPoint.PpPrintRangeType]::ppPrintAll, 
[System.Reflection.Missing]::Value, 
$true, 
$true, 
$true, 
$true, 
$false, 
[System.Reflection.Missing]::Value)

2 个答案:

答案 0 :(得分:1)

我意识到这是一个迟到的答案,但我认为我已经得到了解决方案。 (我试图使用NetOffice在c#中调用此方法,并得到相同的错误)

Microsoft Powerpoint似乎存在一个错误(至少在2007年和2010年)。 必须指定PrintRange参数,因为默认值(0)无效!

因此工作脚本可能如下所示:

Add-type -AssemblyName Office
Add-type -AssemblyName Microsoft.Office.Interop.PowerPoint

$p = new-object -comobject powerpoint.application 
$p.visible = 1  
$document = $p.presentations.open('somefile.ppt')
$ranges = $document.PrintOptions.Ranges
$range = $ranges.Add(1,1)


$document.ExportAsFixedFormat($Path, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::ppFixedFormatTypePDF, 
[Microsoft.Office.Interop.PowerPoint.PpFixedFormatIntent]::ppFixedFormatIntentScreen, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
[Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder]::ppPrintHandoutVerticalFirst, 
[Microsoft.Office.Interop.PowerPoint.PpPrintOutputType]::ppPrintOutputSlides, 
[Microsoft.Office.Core.MsoTriState]::msoFalse, 
$range, 
[Microsoft.Office.Interop.PowerPoint.PpPrintRangeType]::ppPrintAll, 
[System.Reflection.Missing]::Value, 
$true, 
$true, 
$true, 
$true, 
$false, 
[System.Reflection.Missing]::Value)

注意现在传入$ range参数。

注意 - 此答案改编自此处的解决方案:https://netoffice.codeplex.com/discussions/449288

答案 1 :(得分:0)

$null更改为[System.Reflection.Missing]::Value