PowerPoint 2007 SP2,PowerShell中的ExportAsFixedFormat?

时间:2009-05-21 15:59:18

标签: pdf com powershell powerpoint office-2007

昨天我试图将一组PPT批量转换成朋友的PDF格式,我决定看一下PowerShell,因为它已经在我的HD上待了一段时间。

这是我提出的代码。

$p = new-object -comobject powerpoint.application

# I actually don't know why I have to set the window to visible, 
# but it doesn't work otherwise, anyway, it's not the real problem I have
$p.visible = 1 

$f = $p.presentations.open('\some\file.ppt')

$f.ExportAsFixedFormat('\some\newfile.pdf', 2) 

2 is for PDF

由于“强力”方法不起作用(“类型不匹配”)我试图用

导入枚举类型
$pptypepdf= [Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::PpFixedFormatTypePDF
$f.ExportAsFixedFormat('\some\newfile.pdf', $pptypepdf) 

这里奇怪的是它仍然会引发“类型不匹配”错误......

此外,SaveAs可以正常使用

$f.SaveAs('\some\newfile.pdf', 32) # 32 is for PDF

我做错了什么?

更新

相关文件:

这是完整的错误消息

$pptypepdf= [Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::PpFixedFormatTypePDF
$f.ExportAsFixedFormat($filepath, $pptypepdf)

Exception calling "ExportAsFixedFormat" with "2" argument(s): "Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"

At line:1 char:23
+ $f.ExportAsFixedFormat <<<< ($filepath, $pptypepdf)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

1 个答案:

答案 0 :(得分:1)

我在Python中遇到了同样的问题。尝试在Stefan Schukat的解决方案中指定PrintRange参数:

  

这是Powerpoint中的一个错误。它定义了“[in,optional,   defaultvalue(0)] PrintRange * PrintRange“导致生成   python包装器中的“PrintRange = 0”。所以你会得到的   调用方法时出错。所以没有makepy的问题。解决方法   使用PrintRange = None调用该方法,因为None是一个vali COM对象。   例如。 presentation.ExportAsFixedFormat(pptFile + 'PDF',   win32com.client.constants.ppFixedFormatTypePDF,   win32com.client.constants.ppFixedFormatIntentScreen,PrintRange = None)   应该工作。

Source: Type mismatch when using export fuction of PowerPoint 2007

我根本不了解PowerShell,但已经找到了一个有效的例子:

$p.ActivePresentation.PrintOptions.Ranges.Add(1,1)
$r = $p.ActivePresentation.PrintOptions.Ranges.Item(1)
$document.ExportAsFixedFormat('D:\\ps.pdf', 2, 1, 0, 1, 1, 0, $r)

这不是一个完整的解决方案,但已完成导出。它以某种方式导出完整的演示文稿,不仅仅是幻灯片。 1,正如我所想。附:哦。这是相同的solution