2009-05-21 4 views
1

Gestern habe ich versucht, eine Gruppe von PPTs in PDFs für einen Freund zu konvertieren, und ich entschied mich für einen Blick auf PowerShell, da es eine Weile auf meiner HD sitzt.PowerPoint 2007 SP2, ExportAsFixedFormat in PowerShell?

Hier ist der Code, den ich mir ausgedacht habe.

$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

Da die "Brute Force" -Methode nicht funktionierte ("type mismatch") Ich habe versucht, den Aufzählungstyp mit

$pptypepdf= [Microsoft.Office.Interop.PowerPoint.PpFixedFormatType]::PpFixedFormatTypePDF 
$f.ExportAsFixedFormat('\some\newfile.pdf', $pptypepdf) 

Das Merkwürdige hier zu importieren ist, dass es immer noch einen „Typenkonflikt“ Fehler wirft ...

Außerdem funktioniert SaveAs fein mit

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

Was mache ich falsch?

aktualisieren

Relevante Dokumentation:

Hier ist die vollständige Fehlermeldung

$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

Was ist der genaue Fehler? Ich habe MSDN überprüft, und die Dokumentation zu dieser Methode scheint für dieses Argument falsch zu sein. Und ich kann nicht einmal diese Aufzählung auf MSDN finden! – JasonMArcher

+0

Ich habe die Frage mit den relevanten Details bearbeitet, danke –

+0

Haben Sie versucht, einen Anruf mit allen optionalen Parametern? –

Antwort

1

Ich bin in Python auf das gleiche Problem gestoßen. Versuchen Sie, PrintRange Argument wie in der Lösung von Stefan Schukat angegeben:

Dies ist ein Fehler in Powerpoint. Es definiert "[in, optional, defaultvalue (0)] PrintRange * PrintRange" was zur Generierung von "PrintRange = 0" im Python-Wrapper führt. Daher erhalten Sie beim Aufruf der Methode den Fehler . Also kein Problem von makepy. Problemumgehung Rufen Sie die Methode mit PrintRange = None auf, da None ein COM-Objekt ist. Zum Beispiel presentation.ExportAsFixedFormat (pptFile + '. pdf', win32com.client.constants.ppFixedFormatTypePDF, win32com.client.constants.ppFixedFormatIntentScreen, PrintRange = Keine) sollte funktionieren.

Source: Type mismatch when using export fuction of PowerPoint 2007


Ich weiß Powershell überhaupt nicht, sondern haben ein funktionierendes Beispiel ausgearbeitet:

$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) 

Dies ist keine vollständige Lösung, aber getan wird exportiert. Es exportiert irgendwie vollständige Präsentation, nicht nur Folie Nr. 1, wie ich dachte. P.S. Oh. Hier ist das gleiche solution

Verwandte Themen