我尝试从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)
答案 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
。